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