1/******************************************************************************
2	NintendoWare for CTR Maya Plugin
3
4	File:         NW4C_SetNoCompressNode.mel
5	Description:  set no compress node
6	Date:         2009/11/25
7	Author:       Takashi Endo
8
9	Copyright (C)2009-2010 Nintendo Co., Ltd. / HAL Laboratory, Inc. All rights reserved.
10******************************************************************************/
11
12// UpdateWindow DoSearch
13
14/******************************************************************************
15	is scene anim object
16******************************************************************************/
17proc int IsSceneAnimObject(string $node)
18{
19	string $type = nodeType($node);
20	string $childs[] = `listRelatives -pa -s $node`;
21	if (size(`ls -cameras -lights -typ environmentFog $childs`) > 0 ||
22		$type == "lookAt")
23	{
24		return true;
25	}
26	return false;
27}
28
29/******************************************************************************
30	get selected transform (except camera & light)
31
32		return node size
33******************************************************************************/
34proc int GetSelectedXform(string $xforms[])
35{
36	clear($xforms);
37
38	string $nodes[] = `ls -sl -typ transform`;
39	for ($node in $nodes)
40	{
41		if (!IsSceneAnimObject($node))
42		{
43			$xforms[size($xforms)] = $node;
44		}
45	}
46
47	return size($xforms);
48}
49
50/******************************************************************************
51	no compress
52******************************************************************************/
53global proc int nw4cSetNoCompressNode_Get_NoCompress(string $node)
54{
55	return (`attributeQuery -n $node -ex "nw4cNoCompressNode"`) ?
56		`getAttr ($node + ".nw4cNoCompressNode")` : 0;
57}
58
59global proc nw4cSetNoCompressNode_Add_NoCompress(string $node)
60{
61	if (!`attributeQuery -n $node -ex "nw4cNoCompressNode"`)
62	{
63		addAttr -ln "nw4cNoCompressNode" -at "bool" -dv 0 -h 1 $node;
64	}
65}
66
67global proc nw4cSetNoCompressNode_Set_NoCompress(string $node, int $val)
68{
69	nw4cSetNoCompressNode_Add_NoCompress($node);
70	setAttr ($node + ".nw4cNoCompressNode") $val;
71}
72
73proc SetJob_NoCompress(string $node)
74{
75	if (!`attributeQuery -n $node -ex "nw4cNoCompressNode"`)
76	{
77		return;
78	}
79	scriptJob -p nw4cSetNoCompressNode_NoCompress -rp -ac ($node + ".nw4cNoCompressNode")
80		("optionMenuGrp -e -sl (`nw4cSetNoCompressNode_Get_NoCompress "
81			+ $node + "` + 1) nw4cSetNoCompressNode_NoCompress");
82}
83
84global proc nw4cSetNoCompressNode_NoCompressCB(string $mainNode)
85{
86	string $xforms[];
87	GetSelectedXform($xforms);
88
89	int $val = `optionMenuGrp -q -sl nw4cSetNoCompressNode_NoCompress` - 1;
90	for ($node in $xforms)
91	{
92		nw4cSetNoCompressNode_Set_NoCompress($node, $val);
93	}
94	SetJob_NoCompress($mainNode);
95}
96
97/******************************************************************************
98	update window
99******************************************************************************/
100global proc nw4cSetNoCompressNode_UpdateWindow()
101{
102	//-----------------------------------------------------------------------------
103	// get selection
104	string $xforms[];
105	GetSelectedXform($xforms);
106	int $enableFlag = (size($xforms) > 0);
107
108	//-----------------------------------------------------------------------------
109	// set node name
110	string $nodesName;
111	if ($enableFlag)
112	{
113		$nodesName = $xforms[0];
114		int $nodeSize = size($xforms);
115		for ($inode = 1; $inode < $nodeSize; ++$inode)
116		{
117			if ($inode == 3)
118			{
119				$nodesName += ", ... (" + $nodeSize + ")";
120				break;
121			}
122			$nodesName += ",  " + $xforms[$inode];
123		}
124	}
125	else
126	{
127		$nodesName = "(None)";
128	}
129	text -e -l $nodesName nw4cSetNoCompressNode_NodeName;
130
131	//-----------------------------------------------------------------------------
132	// set current attr & change command
133	if ($enableFlag)
134	{
135		string $node = $xforms[0];
136
137		optionMenuGrp -e -sl (`nw4cSetNoCompressNode_Get_NoCompress $node` + 1)
138			-cc ("nw4cSetNoCompressNode_NoCompressCB " + $node)
139			nw4cSetNoCompressNode_NoCompress;
140
141		SetJob_NoCompress($node);
142	}
143
144	//-----------------------------------------------------------------------------
145	// set enable state
146	control -e -en $enableFlag nw4cSetNoCompressNode_NoCompress;
147}
148
149/******************************************************************************
150	search check CB
151******************************************************************************/
152global proc nw4cSetNoCompressNode_SearchCheckCB()
153{
154	control -e -en
155		(`checkBoxGrp -q -v1 nw4cSetNoCompressNode_SearchCheck` ||
156		 `checkBoxGrp -q -v2 nw4cSetNoCompressNode_SearchCheck`)
157		nw4cSetNoCompressNode_SearchBtn;
158}
159
160/******************************************************************************
161	do search
162******************************************************************************/
163global proc nw4cSetNoCompressNode_DoSearch()
164{
165	int $searchVal1 = `checkBoxGrp -q -v1 nw4cSetNoCompressNode_SearchCheck` ?
166		0 : -1;
167	int $searchVal2 = `checkBoxGrp -q -v2 nw4cSetNoCompressNode_SearchCheck` ?
168		1 : -1;
169
170	int $nodeCount = 0;
171	select -cl;
172	string $xforms[] = `ls -typ transform`;
173	for ($node in $xforms)
174	{
175		if (IsSceneAnimObject($node))
176		{
177			continue;
178		}
179		int $val = nw4cSetNoCompressNode_Get_NoCompress($node);
180		if ($val == $searchVal1 || $val == $searchVal2)
181		{
182			select -add $node;
183			++$nodeCount;
184		}
185	}
186
187	if ($nodeCount == 0)
188	{
189		print "Not found\n";
190	}
191	else
192	{
193		string $msg = "Found: " + $nodeCount + " transform node";
194		if ($nodeCount >= 2)
195		{
196			$msg += "s";
197		}
198		print ($msg + "\n");
199	}
200}
201
202/******************************************************************************
203	main
204******************************************************************************/
205global proc NW4C_SetNoCompressNode()
206{
207	//-----------------------------------------------------------------------------
208	// create window
209	int $winW = 400;
210	int $winH = 292;
211	if (!`window -exists nw4cSetNoCompressNode_Win`)
212	{
213		window -t "NW4C Set No Compress Node" -wh $winW $winH -mxb 0 -mb 1
214			nw4cSetNoCompressNode_Win;
215		menu -l "Help";
216		menuItem -l ("Help on " + `window -q -t nw4cSetNoCompressNode_Win` + "...")
217			-c "NW4C_ShowHelp \"html/NW4C_SetNoCompressNode.html\" \"\"";
218
219		columnLayout -adj 1 -cat "both" 4 -cal "center" -rs 4;
220
221		//-----------------------------------------------------------------------------
222		// node name
223		frameLayout -l "Selected Transform Node" -cll 0 -cl 0 -bv 1 -bs "etchedIn";
224			columnLayout -adj 1 -cal "center" -rs 8;
225
226			text -l "" nw4cSetNoCompressNode_NodeName;
227
228			setParent ..; // columnLayout
229		setParent ..; // formLayout
230
231		//-----------------------------------------------------------------------------
232		// set
233		frameLayout -l "Set" -cll 0 -cl 0 -bv 1 -bs "etchedIn";
234			columnLayout -adj 1 -rs 8;
235
236			optionMenuGrp -l ""
237				-cw 1 100 -rat 1 "both" 4 -cal 1 "right"
238				nw4cSetNoCompressNode_NoCompress;
239				menuItem -l "Compress this node if possible";
240				menuItem -l "Don't compress this node";
241
242			setParent ..; // columnLayout
243		setParent ..; // formLayout
244
245		//-----------------------------------------------------------------------------
246		// search
247		frameLayout -l "Search" -cll 0 -cl 0 -bv 1 -bs "etchedIn";
248			columnLayout -adj 1 -rs 8;
249
250			checkBoxGrp -l "" -ncb 2 -cw3 100 100 100
251				-la2 "Compress" "No Compress"
252				-cc "nw4cSetNoCompressNode_SearchCheckCB"
253				nw4cSetNoCompressNode_SearchCheck;
254			rowColumnLayout -nc 2 -cw 1 220 -cw 2 150;
255				text -l ""; // dummy
256				button -l "Search"
257					-c "nw4cSetNoCompressNode_DoSearch"
258					nw4cSetNoCompressNode_SearchBtn;
259			setParent ..; // rowColumnLayout
260
261			setParent ..; // columnLayout
262		setParent ..; // formLayout
263
264		//-----------------------------------------------------------------------------
265		// close button
266		string $closeCmd = "deleteUI nw4cSetNoCompressNode_Win";
267		string $form = `formLayout -nd 100`;
268			string $closeBtn = `button -h 26 -l "Close" -c $closeCmd`;
269			formLayout -e
270				-af $closeBtn "top" 0
271				-af $closeBtn "left" 0
272				-af $closeBtn "bottom" 0
273				-af $closeBtn "right" 0
274				$form;
275		setParent ..; // formLayout
276
277		setParent ..; // columnLayout
278
279		setFocus $closeBtn;
280
281		//-----------------------------------------------------------------------------
282		// set selection change job
283		scriptJob -p nw4cSetNoCompressNode_Win
284			-e "SelectionChanged" "nw4cSetNoCompressNode_UpdateWindow";
285	}
286	if (`window -q -w nw4cSetNoCompressNode_Win` < $winW)
287	{
288		window -e -w $winW nw4cSetNoCompressNode_Win;
289	}
290	if (`window -q -h nw4cSetNoCompressNode_Win` < $winH)
291	{
292		window -e -h $winH nw4cSetNoCompressNode_Win;
293	}
294	//window -e -wh $winW $winH nw4cSetNoCompressNode_Win;
295
296	//-----------------------------------------------------------------------------
297	// update window
298	nw4cSetNoCompressNode_UpdateWindow;
299	nw4cSetNoCompressNode_SearchCheckCB;
300
301	//-----------------------------------------------------------------------------
302	// show window
303	showWindow nw4cSetNoCompressNode_Win;
304}
305