materialSelector.ed.gui 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003
  1. new GuiControl(MaterialSelectorOverlay, EditorGuiGroup) {
  2. canSaveDynamicFields = "0";
  3. Profile = "GuiOverlayProfile";
  4. Enabled = "1";
  5. isContainer = "1";
  6. HorizSizing = "right";
  7. VertSizing = "bottom";
  8. Position = "0 0";
  9. Extent = "1024 768";
  10. MinExtent = "8 2";
  11. canSave = "1";
  12. Visible = "1";
  13. hovertime = "1000";
  14. new GuiWindowCtrl(MaterialSelector){
  15. profile = "ToolsGuiWindowProfile";
  16. HorizSizing = "center";
  17. VertSizing = "center";
  18. resizeWidth = "1";
  19. resizeHeight = "1";
  20. canClose = "1";
  21. canMinimize = "0";
  22. canMaximize = "0";
  23. position = "72 98";
  24. extent =" 766 550";
  25. MinExtent = "383 274";
  26. text = "Material Selector";
  27. closeCommand = "MaterialSelector::hideDialog();";
  28. EdgeSnap = "0";
  29. canCollapse = "0";
  30. visible = "0";
  31. new GuiContainer(){
  32. isContainer = "1";
  33. HorizSizing = "right";
  34. VertSizing = "bottom";
  35. Position = "4 22";
  36. Extent = "120 31";
  37. Profile = "inspectorStyleRolloutDarkProfile";
  38. };
  39. new GuiTextCtrl(){
  40. Profile = "ToolsGuiDefaultProfile";
  41. HorizSizing = "right";
  42. VertSizing = "bottom";
  43. position = "10 23";
  44. extent = "30 16";
  45. text = "Filters";
  46. };
  47. new GuiContainer(){
  48. profile = "ToolsGuiDefaultProfile";
  49. Position = "4 39";
  50. Extent = "120 507";
  51. HorizSizing = "right";
  52. VertSizing = "height";
  53. isContainer = "1";
  54. new GuiScrollCtrl() {
  55. canSaveDynamicFields = "0";
  56. Enabled = "1";
  57. isContainer = "1";
  58. Profile = "GuiEditorScrollProfile";
  59. HorizSizing = "width";
  60. VertSizing = "height";
  61. Position = "0 0";
  62. Extent = "128 355";
  63. MinExtent = "8 8";
  64. canSave = "1";
  65. isDecoy = "0";
  66. Visible = "1";
  67. tooltipprofile = "ToolsGuiDefaultProfile";
  68. hovertime = "1000";
  69. Docking = "Client";
  70. Margin = "0 0 0 0";
  71. Padding = "0 0 0 0";
  72. AnchorTop = "1";
  73. AnchorBottom = "0";
  74. AnchorLeft = "1";
  75. AnchorRight = "0";
  76. willFirstRespond = "1";
  77. hScrollBar = "alwaysOff";
  78. vScrollBar = "dynamic";
  79. lockHorizScroll = true;
  80. lockVertScroll = "false";
  81. constantThumbHeight = "0";
  82. childMargin = "0 0";
  83. mouseWheelScrollSpeed = "-1";
  84. new GuiDynamicCtrlArrayControl() {
  85. canSaveDynamicFields = "0";
  86. internalName = "filterArray";
  87. Enabled = "1";
  88. isContainer = "1";
  89. Profile = "ToolsGuiDefaultProfile";
  90. HorizSizing = "width";
  91. VertSizing = "bottom";
  92. Position = "18 0";
  93. Extent = "128 195";
  94. MinExtent = "8 8";
  95. dynamicSize = "1";
  96. rowSpacing = "2";
  97. colSize = "128";
  98. rowSize = "18";
  99. };
  100. };
  101. };
  102. new GuiContainer(){
  103. Profile = "inspectorStyleRolloutDarkProfile";
  104. Position = "128 22";
  105. Extent = "480 31";
  106. HorizSizing = "width";
  107. VertSizing = "bottom";
  108. isContainer = "1";
  109. };
  110. new GuiTextCtrl(){
  111. profile = "ToolsGuiDefaultProfile";
  112. HorizSizing = "right";
  113. VertSizing = "bottom";
  114. position = "133 23";
  115. extent = "53 16";
  116. text = "Materials";
  117. };
  118. // Create New Material
  119. new GuiBitmapButtonCtrl() {
  120. canSaveDynamicFields = "0";
  121. Enabled = "1";
  122. isContainer = "0";
  123. Profile = "ToolsGuiDefaultProfile";
  124. HorizSizing = "left";
  125. VertSizing = "bottom";
  126. position = "594 24";
  127. Extent = "15 15";
  128. MinExtent = "8 2";
  129. canSave = "1";
  130. Visible = "1";
  131. Command = "MaterialSelector.createNewMaterial();";
  132. hovertime = "1000";
  133. tooltip = "Create New Unmapped Material";
  134. bitmap = "tools/gui/images/new";
  135. groupNum = "-1";
  136. buttonType = "PushButton";
  137. useMouseEvents = "0";
  138. };
  139. new GuiBitmapButtonCtrl() {
  140. canSaveDynamicFields = "0";
  141. Enabled = "1";
  142. isContainer = "0";
  143. Profile = "ToolsGuiDefaultProfile";
  144. HorizSizing = "left";
  145. VertSizing = "bottom";
  146. position = "578 24";
  147. Extent = "15 15";
  148. MinExtent = "8 2";
  149. canSave = "1";
  150. Visible = "1";
  151. Command = "MaterialSelector.showDeleteDialog();";
  152. hovertime = "1000";
  153. tooltip = "Delete Material";
  154. bitmapAsset = "ToolsModule:delete_n_image";
  155. groupNum = "-1";
  156. buttonType = "PushButton";
  157. useMouseEvents = "0";
  158. };
  159. new GuiContainer(){ // Materials
  160. profile = "ToolsGuiDefaultProfile";
  161. Position = "128 39";
  162. Extent = "480 507";
  163. HorizSizing = "width";
  164. VertSizing = "height";
  165. isContainer = "1";
  166. new GuiScrollCtrl() {
  167. canSaveDynamicFields = "0";
  168. Enabled = "1";
  169. isContainer = "1";
  170. Profile = "GuiEditorScrollProfile";
  171. HorizSizing = "width";
  172. VertSizing = "height";
  173. Position = "0 0";
  174. Extent = "480 507";
  175. MinExtent = "8 8";
  176. canSave = "1";
  177. isDecoy = "0";
  178. Visible = "1";
  179. tooltipprofile = "ToolsGuiDefaultProfile";
  180. hovertime = "1000";
  181. Docking = "Client";
  182. Margin = "0 0 0 0";
  183. Padding = "0 0 0 0";
  184. AnchorTop = "1";
  185. AnchorBottom = "0";
  186. AnchorLeft = "1";
  187. AnchorRight = "0";
  188. willFirstRespond = "1";
  189. hScrollBar = "alwaysOff";
  190. vScrollBar = "dynamic";
  191. lockHorizScroll = "true";
  192. lockVertScroll = "false";
  193. constantThumbHeight = "0";
  194. childMargin = "0 0";
  195. mouseWheelScrollSpeed = "-1";
  196. new GuiStackControl(){
  197. HorizSizing = "width";
  198. VertSizing = "bottom";
  199. Position = "0 0";
  200. Extent = "128 0";
  201. changeChildPosition = 0;
  202. changeChildSizeToFit = 1;
  203. new GuiControl(){
  204. Extent = "0 4";
  205. };
  206. new GuiDynamicCtrlArrayControl() {
  207. canSaveDynamicFields = "0";
  208. internalName = "materialSelection";
  209. Enabled = "1";
  210. isContainer = "1";
  211. Profile = "ToolsGuiDefaultProfile";
  212. HorizSizing = "width";
  213. VertSizing = "bottom";
  214. Position = "3 0";
  215. Extent = "128 0";
  216. MinExtent = "8 8";
  217. dynamicSize = "1";
  218. autoCellSize = "1";
  219. rowSpacing = "2";
  220. colSpacing = "2";
  221. margin = "2";
  222. };
  223. };
  224. };
  225. new GuiContainer(){
  226. internalName = "materialPreviewControlContainer";
  227. profile = "ToolsGuiDefaultProfile";
  228. Position = "0 0";
  229. Extent = "480 20";
  230. HorizSizing = "width";
  231. VertSizing = "height";
  232. isContainer = "1";
  233. Docking = "Bottom";
  234. new GuiTextCtrl(){
  235. profile = "ToolsGuiDefaultProfile";
  236. HorizSizing = "right";
  237. VertSizing = "bottom";
  238. position = "0 2";
  239. extent = "100 16";
  240. text = "Thumbnails per Page:";
  241. };
  242. new GuiPopupMenuCtrlEx(){
  243. internalName = "materialPreviewCountPopup";
  244. Profile = "ToolsGuiPopUpMenuProfile";
  245. Position = "104 2";
  246. Extent = "40 18";
  247. HorizSizing = "right";
  248. VertSizing = "bottom";
  249. Command = "MaterialSelector.thumbnailCountUpdate();";
  250. reverseTextList = "0";
  251. Text = "16";
  252. };
  253. new GuiStackControl(){
  254. internalName = "materialPreviewButtonStack";
  255. HorizSizing = "left";
  256. VertSizing = "bottom";
  257. Position = "480 2";
  258. Extent = "0 16";
  259. dynamic = 1;
  260. dynamicPos = 1;
  261. stackingType = "Horizontal";
  262. changeChildPosition = 1;
  263. changeChildSizeToFit = 1;
  264. padding = 2;
  265. new GuiButtonCtrl() {
  266. canSaveDynamicFields = "0";
  267. Enabled = "1";
  268. isContainer = "0";
  269. Profile = "ToolsGuiButtonProfile";
  270. HorizSizing = "right";
  271. VertSizing = "bottom";
  272. Position = "0 0";
  273. Extent = "20 16";
  274. MinExtent = "8 8";
  275. canSave = "1";
  276. isDecoy = "0";
  277. Visible = "1";
  278. Command = "MaterialSelector::firstPage();";
  279. tooltipprofile = "ToolsGuiToolTipProfile";
  280. tooltip = "First";
  281. hovertime = "1000";
  282. text = "|<";
  283. groupNum = "-1";
  284. buttonType = "PushButton";
  285. useMouseEvents = "1";
  286. };
  287. new GuiButtonCtrl() {
  288. canSaveDynamicFields = "0";
  289. Enabled = "1";
  290. isContainer = "0";
  291. Profile = "ToolsGuiButtonProfile";
  292. HorizSizing = "right";
  293. VertSizing = "bottom";
  294. Position = "0 0";
  295. Extent = "20 16";
  296. MinExtent = "8 8";
  297. canSave = "1";
  298. isDecoy = "0";
  299. Visible = "1";
  300. Command = "MaterialSelector::previousPage();";
  301. tooltipprofile = "ToolsGuiToolTipProfile";
  302. tooltip = "Previous";
  303. hovertime = "1000";
  304. text = "<";
  305. groupNum = "-1";
  306. buttonType = "PushButton";
  307. useMouseEvents = "1";
  308. };
  309. new GuiStackControl(){
  310. internalName = "materialPreviewPagesStack";
  311. HorizSizing = "right";
  312. VertSizing = "bottom";
  313. Position = "0 0";
  314. Extent = "0 16";
  315. dynamic = 1;
  316. stackingType = "Horizontal";
  317. changeChildPosition = 1;
  318. changeChildSizeToFit = 1;
  319. padding = 2;
  320. };
  321. new GuiButtonCtrl() {
  322. canSaveDynamicFields = "0";
  323. Enabled = "1";
  324. isContainer = "0";
  325. Profile = "ToolsGuiButtonProfile";
  326. HorizSizing = "right";
  327. VertSizing = "bottom";
  328. Position = "0 0";
  329. Extent = "20 16";
  330. MinExtent = "8 8";
  331. canSave = "1";
  332. isDecoy = "0";
  333. Visible = "1";
  334. Command = "MaterialSelector::nextPage();";
  335. tooltipprofile = "ToolsGuiToolTipProfile";
  336. tooltip = "Next";
  337. hovertime = "1000";
  338. text = ">";
  339. groupNum = "-1";
  340. buttonType = "PushButton";
  341. useMouseEvents = "1";
  342. };
  343. new GuiButtonCtrl() {
  344. canSaveDynamicFields = "0";
  345. Enabled = "1";
  346. isContainer = "0";
  347. Profile = "ToolsGuiButtonProfile";
  348. HorizSizing = "right";
  349. VertSizing = "bottom";
  350. Position = "0 0";
  351. Extent = "20 16";
  352. MinExtent = "8 8";
  353. canSave = "1";
  354. isDecoy = "0";
  355. Visible = "1";
  356. Command = "MaterialSelector::lastPage();";
  357. tooltipprofile = "ToolsGuiToolTipProfile";
  358. tooltip = "Last";
  359. hovertime = "1000";
  360. text = ">|";
  361. groupNum = "-1";
  362. buttonType = "PushButton";
  363. useMouseEvents = "1";
  364. };
  365. };
  366. };
  367. };
  368. new GuiContainer(){
  369. Profile = "inspectorStyleRolloutDarkProfile";
  370. Position = "612 206";
  371. Extent = "150 31";
  372. HorizSizing = "left";
  373. VertSizing = "bottom";
  374. isContainer = "1";
  375. };
  376. new GuiTextCtrl(){
  377. profile = "ToolsGuiDefaultProfile";
  378. HorizSizing = "left";
  379. VertSizing = "bottom";
  380. position = "618 207";
  381. extent = "84 16";
  382. text = "Material Tags";
  383. };
  384. new GuiContainer(){ // Filter Selection
  385. profile = "ToolsGuiDefaultProfile";
  386. Position = "612 223";
  387. Extent = "150 295";
  388. HorizSizing = "left";
  389. VertSizing = "height";
  390. isContainer = "1";
  391. new GuiScrollCtrl() {
  392. canSaveDynamicFields = "0";
  393. Enabled = "1";
  394. isContainer = "1";
  395. Profile = "GuiEditorScrollProfile";
  396. HorizSizing = "width";
  397. VertSizing = "height";
  398. Position = "0 0";
  399. Extent = "128 195";
  400. MinExtent = "8 8";
  401. canSave = "1";
  402. isDecoy = "0";
  403. Visible = "1";
  404. tooltipprofile = "ToolsGuiDefaultProfile";
  405. hovertime = "1000";
  406. Docking = "Client";
  407. Margin = "0 0 0 0";
  408. Padding = "0 0 0 0";
  409. AnchorTop = "1";
  410. AnchorBottom = "0";
  411. AnchorLeft = "1";
  412. AnchorRight = "0";
  413. willFirstRespond = "1";
  414. hScrollBar = "alwaysOff";
  415. vScrollBar = "dynamic";
  416. lockHorizScroll = "true";
  417. lockVertScroll = "false";
  418. constantThumbHeight = "0";
  419. childMargin = "0 0";
  420. mouseWheelScrollSpeed = "-1";
  421. new GuiDynamicCtrlArrayControl() {
  422. canSaveDynamicFields = "0";
  423. internalName = "materialCategories";
  424. Enabled = "1";
  425. isContainer = "1";
  426. Profile = "ToolsGuiDefaultProfile";
  427. HorizSizing = "width";
  428. VertSizing = "bottom";
  429. Position = "0 0";
  430. Extent = "128 195";
  431. MinExtent = "8 8";
  432. dynamicSize = "1";
  433. rowSpacing = "2";
  434. colSize = "128";
  435. rowSize = "18";
  436. };
  437. };
  438. };
  439. new GuiContainer(){
  440. Profile = "inspectorStyleRolloutDarkProfile";
  441. Position = "612 22";
  442. Extent = "150 167";
  443. HorizSizing = "left";
  444. VertSizing = "bottom";
  445. isContainer = "1";
  446. new GuiBitmapCtrl(){
  447. internalName = "previewSelection";
  448. HorizSizing = "left";
  449. VertSizing = "bottom";
  450. profile = "ToolsGuiDefaultProfile";
  451. position = "1 18";
  452. extent = "148 148";
  453. bitmapAsset = "";
  454. };
  455. };
  456. new GuiTextCtrl(){
  457. profile = "ToolsGuiDefaultProfile";
  458. HorizSizing = "left";
  459. VertSizing = "bottom";
  460. position = "618 23";
  461. extent = "84 16";
  462. text = "Diffuse Preview";
  463. };
  464. new GuiBitmapCtrl(){
  465. HorizSizing = "left";
  466. VertSizing = "bottom";
  467. profile = "ToolsGuiDefaultProfile";
  468. position = "612 39";
  469. extent = "150 150";
  470. bitmapAsset = "ToolsModule:terrain_painter_border_large_image";
  471. visible = false;
  472. };
  473. new GuiTextCtrl(){
  474. internalName = "previewSelectionText";
  475. HorizSizing = "left";
  476. VertSizing = "bottom";
  477. profile = "ToolsGuiTextProfile";
  478. position = "613 189";
  479. extent = "149 16";
  480. text = "";
  481. };
  482. new GuiButtonCtrl(){
  483. internalName = "SelectButton";
  484. HorizSizing = "left";
  485. VertSizing = "top";
  486. profile = "ToolsGuiButtonProfile";
  487. position = "612 522";
  488. extent = "94 24";
  489. text = "Select";
  490. command = "MaterialSelector.selectMaterial( MaterialSelector.selectedMaterial );";
  491. };
  492. new GuiButtonCtrl(){
  493. HorizSizing = "left";
  494. VertSizing = "top";
  495. profile = "ToolsGuiButtonProfile";
  496. position = "710 522";
  497. extent = "52 24";
  498. text = "Cancel";
  499. command = "MaterialSelector.hideDialog();";
  500. };
  501. };
  502. new GuiWindowCtrl(MaterialSelector_addFilterWindow) {
  503. canSaveDynamicFields = "0";
  504. isContainer = "1";
  505. Profile = "ToolsGuiWindowProfile";
  506. HorizSizing = "center";
  507. VertSizing = "center";
  508. position = "362 333";
  509. Extent = "272 99";
  510. MinExtent = "48 92";
  511. canSave = "1";
  512. Visible = "0";
  513. tooltipprofile = "ToolsGuiToolTipProfile";
  514. hovertime = "1000";
  515. Margin = "0 0 0 0";
  516. Padding = "0 0 0 0";
  517. AnchorTop = "1";
  518. AnchorBottom = "0";
  519. AnchorLeft = "1";
  520. AnchorRight = "0";
  521. resizeWidth = "1";
  522. resizeHeight = "1";
  523. canMove = "1";
  524. canClose = "0";
  525. canMinimize = "0";
  526. canMaximize = "0";
  527. minSize = "50 50";
  528. EdgeSnap = "1";
  529. text = "Create New Tag";
  530. new GuiTextEditCtrl() {
  531. canSaveDynamicFields = "0";
  532. internalName = "tagName";
  533. isContainer = "0";
  534. Profile = "ToolsGuiTextEditProfile";
  535. HorizSizing = "right";
  536. VertSizing = "bottom";
  537. position = "64 35";
  538. Extent = "196 18";
  539. MinExtent = "8 2";
  540. canSave = "1";
  541. Visible = "1";
  542. tooltipprofile = "ToolsGuiToolTipProfile";
  543. hovertime = "1000";
  544. Margin = "0 0 0 0";
  545. Padding = "0 0 0 0";
  546. AnchorTop = "1";
  547. AnchorBottom = "0";
  548. AnchorLeft = "1";
  549. AnchorRight = "0";
  550. maxLength = "1024";
  551. historySize = "0";
  552. password = "0";
  553. tabComplete = "0";
  554. sinkAllKeyEvents = "0";
  555. passwordMask = "*";
  556. };
  557. new GuiTextCtrl() {
  558. canSaveDynamicFields = "0";
  559. isContainer = "0";
  560. Profile = "ToolsGuiTextProfile";
  561. HorizSizing = "right";
  562. VertSizing = "bottom";
  563. position = "12 35";
  564. Extent = "52 16";
  565. MinExtent = "8 2";
  566. canSave = "1";
  567. Visible = "1";
  568. tooltipprofile = "ToolsGuiToolTipProfile";
  569. hovertime = "1000";
  570. Margin = "0 0 0 0";
  571. Padding = "0 0 0 0";
  572. AnchorTop = "1";
  573. AnchorBottom = "0";
  574. AnchorLeft = "1";
  575. AnchorRight = "0";
  576. maxLength = "1024";
  577. text = "Tag Name";
  578. };
  579. new GuiButtonCtrl() {
  580. canSaveDynamicFields = "0";
  581. isContainer = "0";
  582. Profile = "ToolsGuiButtonProfile";
  583. HorizSizing = "right";
  584. VertSizing = "bottom";
  585. position = "64 68";
  586. Extent = "126 22";
  587. MinExtent = "8 2";
  588. canSave = "1";
  589. Visible = "1";
  590. tooltipprofile = "ToolsGuiToolTipProfile";
  591. hovertime = "1000";
  592. groupNum = "-1";
  593. buttonType = "PushButton";
  594. useMouseEvents = "0";
  595. text = "Create";
  596. Command = "MaterialSelector.createFilter( MaterialSelector_addFilterWindow-->tagName.getText() );MaterialSelector_addFilterWindow.setVisible(0);";
  597. };
  598. new GuiButtonCtrl() {
  599. canSaveDynamicFields = "0";
  600. isContainer = "0";
  601. Profile = "ToolsGuiButtonProfile";
  602. HorizSizing = "right";
  603. VertSizing = "bottom";
  604. position = "196 68";
  605. Extent = "64 22";
  606. MinExtent = "8 2";
  607. canSave = "1";
  608. Visible = "1";
  609. tooltipprofile = "ToolsGuiToolTipProfile";
  610. hovertime = "1000";
  611. groupNum = "-1";
  612. buttonType = "PushButton";
  613. useMouseEvents = "0";
  614. text = "Cancel";
  615. Command = "MaterialSelector_addFilterWindow.setVisible(0);";
  616. };
  617. };
  618. };
  619. $Pref::MaterialSelector::CurrentStaticFilter = "MaterialFilterAllArray";
  620. $Pref::MaterialSelector::CurrentFilter = ""; //ALL
  621. $Pref::MaterialSelector::ThumbnailCountIndex = 0;
  622. new PersistenceManager(MaterialSelectorPerMan);
  623. new ArrayObject(UnlistedMaterials);
  624. UnlistedMaterials.add( "unlistedMaterials", WarningMaterial );
  625. UnlistedMaterials.add( "unlistedMaterials", materialEd_previewMaterial );
  626. UnlistedMaterials.add( "unlistedMaterials", notDirtyMaterial );
  627. UnlistedMaterials.add( "unlistedMaterials", materialEd_cubemapEd_cubeMapPreview );
  628. UnlistedMaterials.add( "unlistedMaterials", matEdCubeMapPreviewMat );
  629. UnlistedMaterials.add( "unlistedMaterials", materialEd_justAlphaMaterial );
  630. UnlistedMaterials.add( "unlistedMaterials", materialEd_justAlphaShader );
  631. function MaterialSelector::selectMaterial( %this, %material )
  632. {
  633. %name = "";
  634. if( MaterialSelector.terrainMaterials )
  635. {
  636. %name = %material;
  637. %material = TerrainMaterialSet.findObjectByInternalName( %material );
  638. }
  639. else
  640. {
  641. %name = %material.getName();
  642. }
  643. // The callback function should be ready to intake the returned material
  644. //eval("materialEd_previewMaterial." @ %propertyField @ " = " @ %value @ ";");
  645. if( MaterialSelector.returnType $= "name" )
  646. eval( "" @ MaterialSelector.selectCallback @ "(" @ %name @ ");");
  647. else if( MaterialSelector.returnType $= "index" )
  648. {
  649. %index = -1;
  650. if( MaterialSelector.terrainMaterials )
  651. {
  652. // Obtain the index into the terrain's material list
  653. %mats = ETerrainEditor.getMaterials();
  654. for(%i = 0; %i < getRecordCount( %mats ); %i++)
  655. {
  656. %matInternalName = getRecord( %mats, %i );
  657. if( %matInternalName $= %name )
  658. {
  659. %index = %i;
  660. break;
  661. }
  662. }
  663. }
  664. else
  665. {
  666. // Obtain the index into the material set
  667. for(%i = 0; %i < materialSet.getCount(); %i++)
  668. {
  669. %obj = materialSet.getObject(%i);
  670. if( %obj.getName() $= %name )
  671. {
  672. %index = %i;
  673. break;
  674. }
  675. }
  676. }
  677. eval( "" @ MaterialSelector.selectCallback @ "(" @ %index @ ");");
  678. }
  679. else
  680. eval( "" @ MaterialSelector.selectCallback @ "(" @ %material.getId() @ ");");
  681. MaterialSelector.hideDialog();
  682. }
  683. function MaterialSelector::showDialog( %this, %selectCallback, %returnType)
  684. {
  685. if( MaterialSelector.isVisible() )
  686. return;
  687. %this.showDialogBase(%selectCallback, %returnType, false);
  688. }
  689. function MaterialSelector::showTerrainDialog( %this, %selectCallback, %returnType)
  690. {
  691. %this.showDialogBase(%selectCallback, %returnType, true);
  692. }
  693. function MaterialSelector::showDialogBase( %this, %selectCallback, %returnType, %useTerrainMaterials)
  694. {
  695. // Set the select callback
  696. MaterialSelector.selectCallback = %selectCallback;
  697. MaterialSelector.returnType = %returnType;
  698. MaterialSelector.currentStaticFilter = $Pref::MaterialSelector::CurrentStaticFilter;
  699. MaterialSelector.currentFilter = $Pref::MaterialSelector::CurrentFilter;
  700. MaterialSelector.terrainMaterials = %useTerrainMaterials;
  701. MaterialSelector-->materialPreviewCountPopup.clear();
  702. MaterialSelector-->materialPreviewCountPopup.add( "10", 0 );
  703. MaterialSelector-->materialPreviewCountPopup.add( "15", 1 );
  704. MaterialSelector-->materialPreviewCountPopup.add( "25", 2 );
  705. MaterialSelector-->materialPreviewCountPopup.add( "50", 3 );
  706. MaterialSelector-->materialPreviewCountPopup.add( "75", 4 );
  707. MaterialSelector-->materialPreviewCountPopup.add( "100", 5 );
  708. MaterialSelector-->materialPreviewCountPopup.setSelected( $Pref::MaterialSelector::ThumbnailCountIndex );
  709. Canvas.pushDialog(MaterialSelectorOverlay);
  710. MaterialSelector.setVisible(1);
  711. MaterialSelector.buildStaticFilters();
  712. MaterialSelector.selectedMaterial = "";
  713. MaterialSelector.loadMaterialFilters();
  714. }
  715. function MaterialSelector::hideDialog( %this )
  716. {
  717. MaterialSelector.breakdown();
  718. MaterialSelector.setVisible(0);
  719. Canvas.popDialog(MaterialSelectorOverlay);
  720. }
  721. function MaterialSelector::breakdown( %this )
  722. {
  723. $Pref::MaterialSelector::CurrentStaticFilter = MaterialSelector.currentStaticFilter;
  724. $Pref::MaterialSelector::CurrentFilter = MaterialSelector.currentFilter;
  725. MaterialSelector-->filterArray.deleteAllObjects();
  726. MaterialSelector-->materialSelection.deleteAllObjects();
  727. MatEdPreviewArray.delete();
  728. MaterialSelector-->materialCategories.deleteAllObjects();
  729. MaterialFilterAllArray.delete();
  730. MaterialFilterMappedArray.delete();
  731. MaterialFilterUnmappedArray.delete();
  732. }
  733. function MaterialSelector::buildStaticFilters( %this )
  734. {
  735. // if you want to add any more containers to staticFilterObjects, here's
  736. // where to do it
  737. %filterArray = MaterialSelector-->filterArray;
  738. %staticFilterContainer = new GuiControl (){
  739. new GuiContainer(){
  740. profile = "ToolsGuiDefaultProfile";
  741. Position = "0 0";
  742. Extent = "128 18";
  743. HorizSizing = "right";
  744. VertSizing = "bottom";
  745. isContainer = "1";
  746. parentGroup = %filterArray;
  747. new GuiContainer(){
  748. profile = "inspectorStyleRolloutDarkProfile";
  749. Position = "-1 0";
  750. Extent = "128 32";
  751. HorizSizing = "right";
  752. VertSizing = "bottom";
  753. isContainer = "1";
  754. };
  755. new GuiTextCtrl(){
  756. Profile = "EditorTextProfile";
  757. position = "5 0";
  758. Extent = "118 18";
  759. text = "Types";
  760. };
  761. };
  762. new GuiContainer(){ // All
  763. profile = "ToolsGuiDefaultProfile";
  764. Position = "415 191";
  765. Extent = "128 18";
  766. HorizSizing = "right";
  767. VertSizing = "bottom";
  768. isContainer = "1";
  769. parentGroup = %filterArray;
  770. new GuiCheckBoxCtrl(MaterialFilterAllArrayCheckbox){
  771. Profile = "ToolsGuiCheckBoxListProfile";
  772. position = "5 2";
  773. Extent = "118 18";
  774. text = "All";
  775. Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterAllArray\");";
  776. };
  777. };
  778. new GuiContainer(){ // Mapped
  779. profile = "ToolsGuiDefaultProfile";
  780. Position = "415 191";
  781. Extent = "128 18";
  782. HorizSizing = "right";
  783. VertSizing = "bottom";
  784. isContainer = "1";
  785. parentGroup = %filterArray;
  786. new GuiCheckBoxCtrl(MaterialFilterMappedArrayCheckbox){
  787. Profile = "ToolsGuiCheckBoxListProfile";
  788. position = "5 2";
  789. Extent = "118 18";
  790. text = "Mapped";
  791. Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterMappedArray\");";
  792. };
  793. };
  794. new GuiContainer(){ // Unmapped
  795. profile = "ToolsGuiDefaultProfile";
  796. Position = "415 191";
  797. Extent = "128 18";
  798. HorizSizing = "right";
  799. VertSizing = "bottom";
  800. isContainer = "1";
  801. parentGroup = %filterArray;
  802. new GuiCheckBoxCtrl(MaterialFilterUnmappedArrayCheckbox){
  803. Profile = "ToolsGuiCheckBoxListProfile";
  804. position = "5 2";
  805. Extent = "118 18";
  806. text = "Unmapped";
  807. Command = "MaterialSelector.switchStaticFilters(\"MaterialFilterUnmappedArray\");";
  808. };
  809. };
  810. new GuiContainer(){
  811. profile = "ToolsGuiDefaultProfile";
  812. Position = "0 0";
  813. Extent = "128 18";
  814. HorizSizing = "right";
  815. VertSizing = "bottom";
  816. isContainer = "1";
  817. parentGroup = %filterArray;
  818. new GuiContainer(){
  819. profile = "inspectorStyleRolloutDarkProfile";
  820. Position = "-1 0";
  821. Extent = "128 32";
  822. HorizSizing = "right";
  823. VertSizing = "bottom";
  824. isContainer = "1";
  825. };
  826. new GuiTextCtrl(){
  827. Profile = "EditorTextProfile";
  828. position = "5 0";
  829. Extent = "118 18";
  830. text = "Tags";
  831. };
  832. // Create New Tag
  833. new GuiBitmapButtonCtrl() {
  834. canSaveDynamicFields = "0";
  835. Enabled = "1";
  836. isContainer = "0";
  837. Profile = "ToolsGuiDefaultProfile";
  838. HorizSizing = "left";
  839. VertSizing = "bottom";
  840. position = "105 2";
  841. Extent = "15 15";
  842. MinExtent = "8 2";
  843. canSave = "1";
  844. Visible = "1";
  845. Command = "MaterialSelector_addFilterWindow.setVisible(1); MaterialSelectorOverlay.pushToBack(MaterialSelector_addFilterWindow);";
  846. hovertime = "1000";
  847. tooltip = "Create New Tag";
  848. bitmapAsset = "ToolsModule:new_n_image";
  849. groupNum = "-1";
  850. buttonType = "PushButton";
  851. useMouseEvents = "0";
  852. };
  853. new GuiBitmapButtonCtrl() {
  854. canSaveDynamicFields = "0";
  855. Enabled = "1";
  856. isContainer = "0";
  857. Profile = "ToolsGuiDefaultProfile";
  858. HorizSizing = "left";
  859. VertSizing = "bottom";
  860. position = "89 2";
  861. Extent = "13 13";
  862. MinExtent = "8 2";
  863. canSave = "1";
  864. Visible = "1";
  865. Command = "MaterialSelector.clearMaterialFilters();";
  866. hovertime = "1000";
  867. tooltip = "Clear Selected Tag";
  868. bitmapAsset = "ToolsModule:clear_btn_n_image";
  869. groupNum = "-1";
  870. buttonType = "PushButton";
  871. useMouseEvents = "0";
  872. };
  873. };
  874. };
  875. %i = %staticFilterContainer.getCount();
  876. for( ; %i != 0; %i--)
  877. MaterialSelector-->filterArray.addGuiControl(%staticFilterContainer.getObject(0));
  878. MaterialSelector.staticFilterObjects = MaterialSelector-->filterArray.getCount();
  879. %staticFilterContainer.delete();
  880. // Create our category array used in the selector, this code should be taken out
  881. // in order to make the material selector agnostic
  882. new ArrayObject(MaterialFilterAllArray);
  883. new ArrayObject(MaterialFilterMappedArray);
  884. new ArrayObject(MaterialFilterUnmappedArray);
  885. %mats = "";
  886. %count = 0;
  887. if( MaterialSelector.terrainMaterials )
  888. {
  889. %mats = ETerrainEditor.getTerrainBlocksMaterialList();
  890. %count = getRecordCount( %mats );
  891. }
  892. else
  893. {
  894. %count = materialSet.getCount();
  895. }
  896. for(%i = 0; %i < %count; %i++)
  897. {
  898. // Process terrain materials
  899. if( MaterialSelector.terrainMaterials )
  900. {
  901. %matInternalName = getRecord( %mats, %i );
  902. %material = TerrainMaterialSet.findObjectByInternalName( %matInternalName );
  903. // Is there no material info for this slot?
  904. if ( !isObject( %material ) )
  905. continue;
  906. // Add to the appropriate filters
  907. MaterialFilterMappedArray.add( "", %material );
  908. MaterialFilterAllArray.add( "", %material );
  909. continue;
  910. }
  911. // Process regular materials here
  912. %material = materialSet.getObject(%i);
  913. for( %k = 0; %k < UnlistedMaterials.count(); %k++ )
  914. {
  915. %unlistedFound = 0;
  916. if( UnlistedMaterials.getValue(%k) $= %material.name )
  917. {
  918. %unlistedFound = 1;
  919. break;
  920. }
  921. }
  922. if( %unlistedFound )
  923. continue;
  924. if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
  925. {
  926. MaterialFilterUnmappedArray.add( "", %material.name );
  927. //running through the existing tag names
  928. for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
  929. MaterialFilterUnmappedArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
  930. }
  931. else
  932. {
  933. MaterialFilterMappedArray.add( "", %material.name );
  934. for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
  935. MaterialFilterMappedArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
  936. }
  937. MaterialFilterAllArray.add( "", %material.name );
  938. for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
  939. MaterialFilterAllArray.add( %material.getFieldValue("materialTag" @ %j), %material.name );
  940. }
  941. MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() @" ) ");
  942. MaterialFilterMappedArrayCheckbox.setText("Mapped ( " @ MaterialFilterMappedArray.count() @" ) ");
  943. MaterialFilterUnmappedArrayCheckbox.setText("Unmapped ( " @ MaterialFilterUnmappedArray.count() @" ) ");
  944. }
  945. function MaterialSelector::preloadFilter( %this )
  946. {
  947. %selectedFilter = "";
  948. for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount(); %i++ )
  949. {
  950. if( MaterialSelector-->filterArray.getObject(%i).getObject(0).getValue() == 1 )
  951. {
  952. if( %selectedFilter $= "" )
  953. %selectedFilter = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
  954. else
  955. %selectedFilter = %selectedFilter @ " " @ MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
  956. }
  957. }
  958. MaterialSelector.loadFilter( %selectedFilter );
  959. }
  960. function MaterialSelector::loadFilter( %this, %selectedFilter, %staticFilter )
  961. {
  962. // manage schedule array properly
  963. if(!isObject(MatEdScheduleArray))
  964. new ArrayObject(MatEdScheduleArray);
  965. // if we select another list... delete all schedules that were created by
  966. // previous load
  967. for( %i = 0; %i < MatEdScheduleArray.count(); %i++ )
  968. cancel(MatEdScheduleArray.getKey(%i));
  969. // we have to empty out the list; so when we create new schedules, these dont linger
  970. MatEdScheduleArray.empty();
  971. // manage preview array
  972. if(!isObject(MatEdPreviewArray))
  973. new ArrayObject(MatEdPreviewArray);
  974. // we have to empty out the list; so when we create new guicontrols, these dont linger
  975. MatEdPreviewArray.empty();
  976. MaterialSelector-->materialSelection.deleteAllObjects();
  977. MaterialSelector-->materialPreviewPagesStack.deleteAllObjects();
  978. // changed to accomadate tagging. dig through the array for each tag name,
  979. // call unique value, sort, and we have a perfect set of materials
  980. if( %staticFilter !$= "" )
  981. MaterialSelector.currentStaticFilter = %staticFilter;
  982. MaterialSelector.currentFilter = %selectedFilter;
  983. %filteredObjectsArray = new ArrayObject();
  984. %previewsPerPage = MaterialSelector-->materialPreviewCountPopup.getTextById( MaterialSelector-->materialPreviewCountPopup.getSelected() );
  985. %tagCount = getWordCount( MaterialSelector.currentFilter );
  986. if( %tagCount != 0 )
  987. {
  988. for( %j = 0; %j < %tagCount; %j++ )
  989. {
  990. for( %i = 0; %i < MaterialSelector.currentStaticFilter.count(); %i++ )
  991. {
  992. %currentTag = getWord( MaterialSelector.currentFilter, %j );
  993. if( MaterialSelector.currentStaticFilter.getKey(%i) $= %currentTag)
  994. %filteredObjectsArray.add( MaterialSelector.currentStaticFilter.getKey(%i), MaterialSelector.currentStaticFilter.getValue(%i) );
  995. }
  996. }
  997. %filteredObjectsArray.uniqueValue();
  998. %filteredObjectsArray.sortd();
  999. MaterialSelector.totalPages = mCeil( %filteredObjectsArray.count() / %previewsPerPage );
  1000. //Can we maintain the current preview page, or should we go to page 1?
  1001. if( (MaterialSelector.currentPreviewPage * %previewsPerPage) >= %filteredObjectsArray.count() )
  1002. MaterialSelector.currentPreviewPage = 0;
  1003. // Build out the pages buttons
  1004. MaterialSelector.buildPagesButtons( MaterialSelector.currentPreviewPage, MaterialSelector.totalPages );
  1005. %previewCount = %previewsPerPage;
  1006. %possiblePreviewCount = %filteredObjectsArray.count() - MaterialSelector.currentPreviewPage * %previewsPerPage;
  1007. if( %possiblePreviewCount < %previewCount )
  1008. %previewCount = %possiblePreviewCount;
  1009. %start = MaterialSelector.currentPreviewPage * %previewsPerPage;
  1010. for( %i = %start; %i < %start + %previewCount; %i++ )
  1011. MaterialSelector.buildPreviewArray( %filteredObjectsArray.getValue(%i) );
  1012. %filteredObjectsArray.delete();
  1013. }
  1014. else
  1015. {
  1016. MaterialSelector.currentStaticFilter.sortd();
  1017. // Rebuild the static filter list without tagged materials
  1018. %noTagArray = new ArrayObject();
  1019. for( %i = 0; %i < MaterialSelector.currentStaticFilter.count(); %i++ )
  1020. {
  1021. if( MaterialSelector.currentStaticFilter.getKey(%i) !$= "")
  1022. continue;
  1023. %material = MaterialSelector.currentStaticFilter.getValue(%i);
  1024. // CustomMaterials are not available for selection
  1025. if ( !isObject( %material ) || %material.isMemberOfClass( "CustomMaterial" ) )
  1026. continue;
  1027. %noTagArray.add( "", %material );
  1028. }
  1029. MaterialSelector.totalPages = mCeil( %noTagArray.count() / %previewsPerPage );
  1030. //Can we maintain the current preview page, or should we go to page 1?
  1031. if( (MaterialSelector.currentPreviewPage * %previewsPerPage) >= %noTagArray.count() )
  1032. MaterialSelector.currentPreviewPage = 0;
  1033. // Build out the pages buttons
  1034. MaterialSelector.buildPagesButtons( MaterialSelector.currentPreviewPage, MaterialSelector.totalPages );
  1035. %previewCount = %previewsPerPage;
  1036. %possiblePreviewCount = %noTagArray.count() - MaterialSelector.currentPreviewPage * %previewsPerPage;
  1037. if( %possiblePreviewCount < %previewCount )
  1038. %previewCount = %possiblePreviewCount;
  1039. %start = MaterialSelector.currentPreviewPage * %previewsPerPage;
  1040. for( %i = %start; %i < %start + %previewCount; %i++ )
  1041. {
  1042. MaterialSelector.buildPreviewArray( %noTagArray.getValue(%i) );
  1043. }
  1044. }
  1045. MaterialSelector.loadImages( 0 );
  1046. }
  1047. function MaterialSelector::buildPreviewArray( %this, %material )
  1048. {
  1049. %matName = "";
  1050. // CustomMaterials are not available for selection
  1051. if ( !isObject( %material ) || %material.isMemberOfClass( "CustomMaterial" ) )
  1052. return;
  1053. if( %material.isMemberOfClass("TerrainMaterial") )
  1054. {
  1055. %matName = %material.getInternalName();
  1056. if( %material.diffuseMap $= "")
  1057. %previewImage = "core/images/warnmat";
  1058. else
  1059. %previewImage = %material.diffuseMap;
  1060. }
  1061. else if( %material.toneMap[0] $= "" && %material.diffuseMap[0] $= "" && !isObject(%material.cubemap) )
  1062. {
  1063. %matName = %material.name;
  1064. %previewImage = "core/images/warnmat";
  1065. }
  1066. else
  1067. {
  1068. %matName = %material.name;
  1069. if( %material.toneMap[0] !$= "" )
  1070. %previewImage = %material.toneMap[0];
  1071. else if( %material.diffuseMap[0] !$= "" )
  1072. %previewImage = %material.diffuseMap[0];
  1073. else if( %material.cubemap.cubeFace[0] !$= "" )
  1074. %previewImage = %material.cubemap.cubeFace[0];
  1075. //%previewImage = MaterialEditorGui.searchForTexture( %material, %previewImage );
  1076. // were going to use a couple of string commands in order to properly
  1077. // find out what the img src path is
  1078. // **NEW** this needs to be updated with the above, but has some timing issues
  1079. %materialDiffuse = %previewImage;
  1080. %materialPath = %material.getFilename();
  1081. if( strchr( %materialDiffuse, "/") $= "" )
  1082. {
  1083. %k = 0;
  1084. while( strpos( %materialPath, "/", %k ) != -1 )
  1085. {
  1086. %foo = strpos( %materialPath, "/", %k );
  1087. %k = %foo + 1;
  1088. }
  1089. %foobar = getSubStr( %materialPath , %k , 99 );
  1090. %previewImage = strreplace( %materialPath, %foobar, %previewImage );
  1091. }
  1092. else
  1093. %previewImage = strreplace( %materialPath, %materialPath, %previewImage );
  1094. }
  1095. // it may seem goofy why the checkbox can't be instanciated inside the container
  1096. // reason being its because we need to store the checkbox ctrl in order to make changes
  1097. // on it later in the function.
  1098. %container = new GuiControl(){
  1099. profile = "ToolsGuiDefaultProfile";
  1100. Position = "0 0";
  1101. Extent = "74 87";
  1102. HorizSizing = "right";
  1103. VertSizing = "bottom";
  1104. isContainer = "1";
  1105. new GuiTextCtrl(){
  1106. position = "7 71";
  1107. profile = "ToolsGuiTextCenterProfile";
  1108. extent = "64 16";
  1109. text = %matName;
  1110. };
  1111. };
  1112. %previewButton = new GuiBitmapButtonCtrl(){
  1113. internalName = %matName;
  1114. HorizSizing = "right";
  1115. VertSizing = "bottom";
  1116. profile = "ToolsGuiButtonProfile";
  1117. position = "7 4";
  1118. extent = "64 64";
  1119. buttonType = "PushButton";
  1120. bitmapAsset = "";
  1121. Command = "";
  1122. text = "Loading...";
  1123. useStates = false;
  1124. new GuiBitmapButtonCtrl(){
  1125. HorizSizing = "right";
  1126. VertSizing = "bottom";
  1127. profile = "ToolsGuiButtonProfile";
  1128. position = "0 0";
  1129. extent = "64 64";
  1130. Variable = "";
  1131. buttonType = "toggleButton";
  1132. bitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
  1133. groupNum = "0";
  1134. text = "";
  1135. };
  1136. };
  1137. %previewBorder = new GuiButtonCtrl(){
  1138. internalName = %matName@"Border";
  1139. HorizSizing = "right";
  1140. VertSizing = "bottom";
  1141. profile = "ToolsGuiThumbHighlightButtonProfile";
  1142. position = "3 0";
  1143. extent = "72 88";
  1144. Variable = "";
  1145. buttonType = "toggleButton";
  1146. tooltip = %matName;
  1147. Command = "MaterialSelector.updateSelection( $ThisControl.getParent().getObject(1).internalName, $ThisControl.getParent().getObject(1).bitmap );";
  1148. groupNum = "0";
  1149. text = "";
  1150. };
  1151. %container.add(%previewButton);
  1152. %container.add(%previewBorder);
  1153. // add to the gui control array
  1154. MaterialSelector-->materialSelection.add(%container);
  1155. // add to the array object for reference later
  1156. MatEdPreviewArray.add( %previewButton, %previewImage );
  1157. }
  1158. function MaterialSelector::loadImages( %this, %materialNum )
  1159. {
  1160. // this will save us from spinning our wheels in case we don't exist
  1161. if( !MaterialSelector.visible )
  1162. return;
  1163. // this schedule is here to dynamically load images
  1164. %previewButton = MatEdPreviewArray.getKey(%materialNum);
  1165. %previewImage = MatEdPreviewArray.getValue(%materialNum);
  1166. %previewButton.setBitmap(%previewImage);
  1167. %previewButton.setText("");
  1168. %materialNum++;
  1169. if( %materialNum < MatEdPreviewArray.count() )
  1170. {
  1171. %tempSchedule = %this.schedule(64, "loadImages", %materialNum);
  1172. MatEdScheduleArray.add( %tempSchedule, %materialNum );
  1173. }
  1174. }
  1175. function MaterialSelector::clearMaterialFilters( %this )
  1176. {
  1177. for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount(); %i++ )
  1178. MaterialSelector-->filterArray.getObject(%i).getObject(0).setStateOn(0);
  1179. MaterialSelector.loadFilter( "", "" );
  1180. }
  1181. function MaterialSelector::loadMaterialFilters( %this )
  1182. {
  1183. %filteredTypesArray = new ArrayObject();
  1184. %filteredTypesArray.duplicate( MaterialFilterAllArray );
  1185. %filteredTypesArray.uniqueKey();
  1186. // sort the the keys before we do anything
  1187. %filteredTypesArray.sortkd();
  1188. eval( MaterialSelector.currentStaticFilter @ "Checkbox.setStateOn(1);" );
  1189. // it may seem goofy why the checkbox can't be instanciated inside the container
  1190. // reason being its because we need to store the checkbox ctrl in order to make changes
  1191. // on it later in the function.
  1192. %selectedFilter = "";
  1193. for( %i = 0; %i < %filteredTypesArray.count(); %i++ )
  1194. {
  1195. %filter = %filteredTypesArray.getKey(%i);
  1196. if(%filter $= "")
  1197. continue;
  1198. %container = new GuiControl(){
  1199. profile = "ToolsGuiDefaultProfile";
  1200. Position = "0 0";
  1201. Extent = "128 18";
  1202. HorizSizing = "right";
  1203. VertSizing = "bottom";
  1204. isContainer = "1";
  1205. };
  1206. %checkbox = new GuiCheckBoxCtrl(){
  1207. Profile = "ToolsGuiCheckBoxListProfile";
  1208. position = "5 1";
  1209. Extent = "118 18";
  1210. Command = "";
  1211. groupNum = "0";
  1212. buttonType = "ToggleButton";
  1213. text = %filter @ " ( " @ MaterialFilterAllArray.countKey(%filter) @ " )";
  1214. filter = %filter;
  1215. Command = "MaterialSelector.preloadFilter();";
  1216. };
  1217. %container.add( %checkbox );
  1218. MaterialSelector-->filterArray.add( %container );
  1219. %tagCount = getWordCount( MaterialSelector.currentFilter );
  1220. for( %j = 0; %j < %tagCount; %j++ )
  1221. {
  1222. if( %filter $= getWord( MaterialSelector.currentFilter, %j ) )
  1223. {
  1224. if( %selectedFilter $= "" )
  1225. %selectedFilter = %filter;
  1226. else
  1227. %selectedFilter = %selectedFilter @ " " @ %filter;
  1228. %checkbox.setStateOn(1);
  1229. }
  1230. }
  1231. }
  1232. MaterialSelector.loadFilter( %selectedFilter );
  1233. %filteredTypesArray.delete();
  1234. }
  1235. // create category and update current material if there is one
  1236. function MaterialSelector::createFilter( %this, %filter )
  1237. {
  1238. if( %filter $= "" )
  1239. {
  1240. toolsMessageBoxOK( "Error", "Can not create blank filter.");
  1241. return;
  1242. }
  1243. for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
  1244. {
  1245. %existingFilters = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
  1246. if( %filter $= %existingFilters )
  1247. {
  1248. toolsMessageBoxOK( "Error", "Can not create two filters of the same name.");
  1249. return;
  1250. }
  1251. }
  1252. %container = new GuiControl(){
  1253. profile = "ToolsGuiDefaultProfile";
  1254. Position = "0 0";
  1255. Extent = "128 18";
  1256. HorizSizing = "right";
  1257. VertSizing = "bottom";
  1258. isContainer = "1";
  1259. new GuiCheckBoxCtrl(){
  1260. Profile = "ToolsGuiCheckBoxListProfile";
  1261. position = "5 1";
  1262. Extent = "118 18";
  1263. Command = "";
  1264. groupNum = "0";
  1265. buttonType = "ToggleButton";
  1266. text = %filter @ " ( " @ MaterialFilterAllArray.countKey(%filter) @ " )";
  1267. filter = %filter;
  1268. Command = "MaterialSelector.preloadFilter();";
  1269. };
  1270. };
  1271. MaterialSelector-->filterArray.add( %container );
  1272. // if selection exists, lets reselect it to refresh it
  1273. if( isObject(MaterialSelector.selectedMaterial) )
  1274. MaterialSelector.updateSelection( MaterialSelector.selectedMaterial, MaterialSelector.selectedPreviewImagePath );
  1275. // material category text field to blank
  1276. MaterialSelector_addFilterWindow-->tagName.setText("");
  1277. }
  1278. function MaterialSelector::updateSelection( %this, %material, %previewImagePath )
  1279. {
  1280. // the material selector will visually update per material information
  1281. // after we move away from the material. eg: if we remove a field from the material,
  1282. // the empty checkbox will still be there until you move fro and to the material again
  1283. %isMaterialBorder = eval("return isObject(MaterialSelector-->"@%material@"Border);");
  1284. if( %isMaterialBorder )
  1285. {
  1286. eval( "MaterialSelector-->"@%material@"Border.setStateOn(1);");
  1287. }
  1288. %isMaterialBorderPrevious = eval("return isObject(MaterialSelector-->"@$prevSelectedMaterialHL@"Border);");
  1289. if( %isMaterialBorderPrevious )
  1290. {
  1291. eval( "MaterialSelector-->"@$prevSelectedMaterialHL@"Border.setStateOn(0);");
  1292. }
  1293. MaterialSelector-->materialCategories.deleteAllObjects();
  1294. MaterialSelector.selectedMaterial = %material;
  1295. MaterialSelector.selectedPreviewImagePath = %previewImagePath;
  1296. MaterialSelector-->previewSelectionText.setText( %material );
  1297. MaterialSelector-->previewSelection.setBitmap( %previewImagePath );
  1298. // running through the existing list of categorynames in the left, so yes
  1299. // some might exist on the left only temporary if not given a home
  1300. for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
  1301. {
  1302. %filter = MaterialSelector-->filterArray.getObject(%i).getObject(0).filter;
  1303. %checkbox = new GuiCheckBoxCtrl(){
  1304. materialName = %material.name;
  1305. Profile = "ToolsGuiCheckBoxListProfile";
  1306. position = "5 2";
  1307. Extent = "118 18";
  1308. Command = "MaterialSelector.updateMaterialTags( $ThisControl.materialName, $ThisControl.getText(), $ThisControl.getValue() );";
  1309. text = %filter;
  1310. };
  1311. MaterialSelector-->materialCategories.add( %checkbox );
  1312. // crawl through material for categories in order to check or not
  1313. %filterFound = 0;
  1314. for( %j = 0; %material.getFieldValue("materialTag" @ %j) !$= ""; %j++ )
  1315. {
  1316. %tag = %material.getFieldValue("materialTag" @ %j);
  1317. if( %tag $= %filter )
  1318. {
  1319. %filterFound = 1;
  1320. break;
  1321. }
  1322. }
  1323. if( %filterFound )
  1324. %checkbox.setStateOn(1);
  1325. else
  1326. %checkbox.setStateOn(0);
  1327. }
  1328. $prevSelectedMaterialHL = %material;
  1329. }
  1330. function MaterialSelector::updateMaterialTags( %this, %material, %tag, %tagValue )
  1331. {
  1332. if( %tagValue == 1 )
  1333. {
  1334. MaterialFilterAllArray.add( %tag, %material );
  1335. if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
  1336. %secondStaticFilter = MaterialFilterUnmappedArray;
  1337. else
  1338. %secondStaticFilter = MaterialFilterMappedArray;
  1339. %secondStaticFilter.add( %tag, %material );
  1340. %createdTag = 0;
  1341. for( %i = 0; %createdTag == 0; %i++ )
  1342. {
  1343. %materialTag = %material.getFieldValue("materialTag" @ %i);
  1344. if( %materialTag $= "" )
  1345. {
  1346. eval( %material @ ".materialTag" @ %i @ "=" @ %tag @ ";" );
  1347. %createdTag = 1;
  1348. for( %j = MaterialSelector.staticFilterObjects; %j < MaterialSelector-->filterArray.getCount() ; %j++ )
  1349. {
  1350. if( %tag $= MaterialSelector-->filterArray.getObject(%j).getObject(0).filter )
  1351. {
  1352. %count = getWord( MaterialSelector-->filterArray.getObject(%j).getObject(0).getText(), 2 );
  1353. %count++;
  1354. MaterialSelector-->filterArray.getObject(%j).getObject(0).setText( %tag @ " ( "@ %count @ " )");
  1355. }
  1356. }
  1357. break;
  1358. }
  1359. }
  1360. }
  1361. else
  1362. {
  1363. // Remove the material from the "all" category
  1364. for( %i = 0; %i < MaterialFilterAllArray.count(); %i++ )
  1365. {
  1366. if( MaterialFilterAllArray.getKey(%i) $= %tag )
  1367. {
  1368. if( MaterialFilterAllArray.getValue(%i) $= %material )
  1369. {
  1370. MaterialFilterAllArray.erase(%i);
  1371. break;
  1372. }
  1373. }
  1374. }
  1375. // Figure out what the material's other category is
  1376. if( %material.mapTo $= "" || %material.mapTo $= "unmapped_mat" )
  1377. %secondStaticFilter = MaterialFilterUnmappedArray;
  1378. else
  1379. %secondStaticFilter = MaterialFilterMappedArray;
  1380. // Remove the material from its other category
  1381. for( %i = 0; %i < %secondStaticFilter.count(); %i++ )
  1382. {
  1383. if( %secondStaticFilter.getKey(%i) $= %tag )
  1384. {
  1385. if( %secondStaticFilter.getValue(%i) $= %material )
  1386. {
  1387. %secondStaticFilter.erase( %i );
  1388. break;
  1389. }
  1390. }
  1391. }
  1392. MaterialSelector.updateFilterCount( %tag, false );
  1393. %tagField = MaterialSelector.getTagField( %material, %tag );
  1394. %lastTagField = MaterialSelector.getLastTagField( %material );
  1395. %lastValidTagField = MaterialSelector.getLastValidTagField( %material, %tag );
  1396. if( %tagField $= %lastValidTagField || %lastValidTagField $= "" )
  1397. {
  1398. MaterialSelectorPerMan.removeField( %material, %tagField );
  1399. }
  1400. else
  1401. {
  1402. // Replace the current tagFieldValue with the last tagFieldValue
  1403. %lastValidTag = %material.getFieldValue( %lastValidTagField );
  1404. %material.setFieldValue( %tagField, %lastValidTag );
  1405. // Remove the last tagFieldValue
  1406. MaterialSelectorPerMan.removeField( %material, %lastTagField );
  1407. }
  1408. }
  1409. // so were not going to save materials that dont current exist...
  1410. // technically all the data is stored in dynamic fields if the user feels like saving
  1411. // their auto-generated or new material
  1412. if( %material.getFilename() !$= "" &&
  1413. %material.getFilename() !$= "tools/gui/MaterialSelector.ed.gui" &&
  1414. %material.getFilename() !$= "tools/materialEditor/scripts/materialEditor.ed." @ $TorqueScriptFileExtension )
  1415. {
  1416. MaterialSelectorPerMan.setDirty( %material );
  1417. MaterialSelectorPerMan.saveDirty();
  1418. MaterialSelectorPerMan.removeDirty( %material );
  1419. if(!%tagValue)
  1420. %material.setFieldValue( %lastTagField, "" );
  1421. }
  1422. }
  1423. function MaterialSelector::updateFilterCount( %this, %tag, %add )
  1424. {
  1425. for( %i = MaterialSelector.staticFilterObjects; %i < MaterialSelector-->filterArray.getCount() ; %i++ )
  1426. {
  1427. if( %tag $= MaterialSelector-->filterArray.getObject(%i).getObject(0).filter )
  1428. {
  1429. // Get the filter count and apply the operation
  1430. %idx = getWord( MaterialSelector-->filterArray.getObject(%i).getObject(0).getText(), 2 );
  1431. if( %add )
  1432. %idx++;
  1433. else
  1434. %idx--;
  1435. MaterialSelector-->filterArray.getObject(%i).getObject(0).setText( %tag @ " ( "@ %idx @ " )");
  1436. }
  1437. }
  1438. }
  1439. // this should create a new material pretty nicely
  1440. function MaterialSelector::createNewMaterial( %this )
  1441. {
  1442. // look for a newMaterial name to grab
  1443. %material = getUniqueName( "newMaterial" );
  1444. new Material(%material)
  1445. {
  1446. diffuseMap[0] = "core/images/warnmat";
  1447. mapTo = "unmapped_mat";
  1448. parentGroup = RootGroup;
  1449. };
  1450. // add one to All filter
  1451. MaterialFilterAllArray.add( "", %material.name );
  1452. MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() + 1 @ " ) ");
  1453. MaterialFilterUnmappedArray.add( "", %material.name );
  1454. MaterialFilterUnmappedArrayCheckbox.setText("Unmapped ( " @ MaterialFilterUnmappedArray.count() + 1 @ " ) ");
  1455. if( MaterialSelector.currentStaticFilter !$= "MaterialFilterMappedArray" )
  1456. {
  1457. // create the new material gui
  1458. %container = new GuiControl(){
  1459. profile = "ToolsGuiDefaultProfile";
  1460. Position = "0 0";
  1461. Extent = "74 85";
  1462. HorizSizing = "right";
  1463. VertSizing = "bottom";
  1464. isContainer = "1";
  1465. new GuiTextCtrl(){
  1466. position = "10 70";
  1467. profile = "ToolsGuiTextCenterProfile";
  1468. extent = "64 16";
  1469. text = %material.name;
  1470. };
  1471. };
  1472. %previewButton = new GuiBitmapButtonCtrl(){
  1473. internalName = %material.name;
  1474. HorizSizing = "right";
  1475. VertSizing = "bottom";
  1476. profile = "ToolsGuiButtonProfile";
  1477. position = "7 4";
  1478. extent = "64 64";
  1479. buttonType = "PushButton";
  1480. bitmap = "core/images/warnmat";
  1481. Command = "";
  1482. text = "Loading...";
  1483. useStates = false;
  1484. new GuiBitmapButtonCtrl(){
  1485. HorizSizing = "right";
  1486. VertSizing = "bottom";
  1487. profile = "ToolsGuiButtonProfile";
  1488. position = "0 0";
  1489. extent = "64 64";
  1490. Variable = "";
  1491. buttonType = "toggleButton";
  1492. bitmapAsset = "ToolsModule:cubemapBtnBorder_n_image";
  1493. groupNum = "0";
  1494. text = "";
  1495. };
  1496. };
  1497. %previewBorder = new GuiButtonCtrl(){
  1498. internalName = %material.name@"Border";
  1499. HorizSizing = "right";
  1500. VertSizing = "bottom";
  1501. profile = "ToolsGuiThumbHighlightButtonProfile";
  1502. position = "3 0";
  1503. extent = "72 88";
  1504. Variable = "";
  1505. buttonType = "toggleButton";
  1506. tooltip = %material.name;
  1507. Command = "MaterialSelector.updateSelection( $ThisControl.getParent().getObject(1).internalName, $ThisControl.getParent().getObject(1).bitmap );";
  1508. groupNum = "0";
  1509. text = "";
  1510. };
  1511. %container.add(%previewButton);
  1512. %container.add(%previewBorder);
  1513. // add to the gui control array
  1514. MaterialSelector-->materialSelection.add(%container);
  1515. }
  1516. // select me
  1517. MaterialSelector.updateSelection( %material, "core/images/warnmat.png" );
  1518. }
  1519. //needs to be deleted with the persistence manager and needs to be blanked out of the matmanager
  1520. //also need to update instances... i guess which is the tricky part....
  1521. function MaterialSelector::showDeleteDialog( %this )
  1522. {
  1523. %material = MaterialSelector.selectedMaterial;
  1524. %secondFilter = "MaterialFilterMappedArray";
  1525. %secondFilterName = "Mapped";
  1526. for( %i = 0; %i < MaterialFilterUnmappedArray.count(); %i++ )
  1527. {
  1528. if( MaterialFilterUnmappedArray.getValue(%i) $= %material )
  1529. {
  1530. %secondFilter = "MaterialFilterUnmappedArray";
  1531. %secondFilterName = "Unmapped";
  1532. break;
  1533. }
  1534. }
  1535. if( isObject( %material ) )
  1536. {
  1537. toolsMessageBoxYesNoCancel("Delete Material?",
  1538. "Are you sure you want to delete<br><br>" @ %material.getName() @ "<br><br> Material deletion won't take affect until the engine is quit.",
  1539. "MaterialSelector.deleteMaterial( " @ %material @ ", " @ %secondFilter @ ", " @ %secondFilterName @" );",
  1540. "",
  1541. "" );
  1542. }
  1543. }
  1544. function MaterialSelector::deleteMaterial( %this, %materialName, %secondFilter, %secondFilterName )
  1545. {
  1546. if( !isObject( %materialName ) )
  1547. return;
  1548. for( %i = 0; %i <= MaterialFilterAllArray.countValue( %materialName ); %i++)
  1549. {
  1550. %index = MaterialFilterAllArray.getIndexFromValue( %materialName );
  1551. MaterialFilterAllArray.erase( %index );
  1552. }
  1553. MaterialFilterAllArrayCheckbox.setText("All ( " @ MaterialFilterAllArray.count() - 1 @ " ) ");
  1554. %checkbox = %secondFilter @ "Checkbox";
  1555. for( %k = 0; %k <= %secondFilter.countValue( %materialName ); %k++)
  1556. {
  1557. %index = %secondFilter.getIndexFromValue( %materialName );
  1558. %secondFilter.erase( %index );
  1559. }
  1560. %checkbox.setText( %secondFilterName @ " ( " @ %secondFilter.count() - 1 @ " ) ");
  1561. for( %i = 0; %materialName.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
  1562. {
  1563. %materialTag = %materialName.getFieldValue("materialTag" @ %i);
  1564. for( %j = MaterialSelector.staticFilterObjects; %j < MaterialSelector-->filterArray.getCount() ; %j++ )
  1565. {
  1566. if( %materialTag $= MaterialSelector-->filterArray.getObject(%j).getObject(0).filter )
  1567. {
  1568. %count = getWord( MaterialSelector-->filterArray.getObject(%j).getObject(0).getText(), 2 );
  1569. %count--;
  1570. MaterialSelector-->filterArray.getObject(%j).getObject(0).setText( %materialTag @ " ( "@ %count @ " )");
  1571. }
  1572. }
  1573. }
  1574. UnlistedMaterials.add( "unlistedMaterials", %materialName );
  1575. if( %materialName.getFilename() !$= "" &&
  1576. %materialName.getFilename() !$= "tools/gui/MaterialSelector.ed.gui" &&
  1577. %materialName.getFilename() !$= "tools/materialEditor/scripts/materialEditor.ed." @ $TorqueScriptFileExtension )
  1578. {
  1579. MaterialSelectorPerMan.removeObjectFromFile(%materialName);
  1580. MaterialSelectorPerMan.saveDirty();
  1581. }
  1582. MaterialSelector.preloadFilter();
  1583. //MaterialSelector.selectMaterial( "WarningMaterial" );
  1584. }
  1585. function MaterialSelector::switchStaticFilters( %this, %staticFilter)
  1586. {
  1587. switch$(%staticFilter)
  1588. {
  1589. case "MaterialFilterAllArray":
  1590. MaterialFilterAllArrayCheckbox.setStateOn(1);
  1591. MaterialFilterMappedArrayCheckbox.setStateOn(0);
  1592. MaterialFilterUnmappedArrayCheckbox.setStateOn(0);
  1593. case "MaterialFilterMappedArray":
  1594. MaterialFilterMappedArrayCheckbox.setStateOn(1);
  1595. MaterialFilterAllArrayCheckbox.setStateOn(0);
  1596. MaterialFilterUnmappedArrayCheckbox.setStateOn(0);
  1597. case "MaterialFilterUnmappedArray":
  1598. MaterialFilterUnmappedArrayCheckbox.setStateOn(1);
  1599. MaterialFilterAllArrayCheckbox.setStateOn(0);
  1600. MaterialFilterMappedArrayCheckbox.setStateOn(0);
  1601. }
  1602. // kinda goofy were passing a class variable... we can't do an empty check right now
  1603. // on load filter because we actually pass "" as a filter...
  1604. MaterialSelector.loadFilter( MaterialSelector.currentFilter, %staticFilter );
  1605. }
  1606. // Tagging Functionality
  1607. function MaterialSelector::getTagField( %this, %material, %tag )
  1608. {
  1609. for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
  1610. {
  1611. %loopTag = %material.getFieldValue("materialTag" @ %i);
  1612. if( %tag $= %loopTag )
  1613. {
  1614. %tagField = "materialTag" @ %i;
  1615. break;
  1616. }
  1617. }
  1618. return %tagField;
  1619. }
  1620. function MaterialSelector::getLastTagField( %this, %material )
  1621. {
  1622. for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
  1623. {
  1624. %tagField = "materialTag" @ %i;
  1625. }
  1626. return %tagField;
  1627. }
  1628. function MaterialSelector::getLastValidTagField( %this, %material, %invalidTag )
  1629. {
  1630. for( %i = 0; %material.getFieldValue("materialTag" @ %i) !$= ""; %i++ )
  1631. {
  1632. %tag = %material.getFieldValue("materialTag" @ %i);
  1633. // Can't equal our invalid tag
  1634. if( %tag $= %invalidTag )
  1635. continue;
  1636. // Set our last found tag
  1637. %tagField = "materialTag" @ %i;
  1638. }
  1639. return %tagField;
  1640. }
  1641. // Preview Page Navigation
  1642. function MaterialSelector::firstPage(%this)
  1643. {
  1644. MaterialSelector.currentPreviewPage = 0;
  1645. MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
  1646. }
  1647. function MaterialSelector::previousPage(%this)
  1648. {
  1649. MaterialSelector.currentPreviewPage--;
  1650. if( MaterialSelector.currentPreviewPage < 0)
  1651. MaterialSelector.currentPreviewPage = 0;
  1652. MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
  1653. }
  1654. function MaterialSelector::nextPage(%this)
  1655. {
  1656. MaterialSelector.currentPreviewPage++;
  1657. if( MaterialSelector.currentPreviewPage >= MaterialSelector.totalPages)
  1658. MaterialSelector.currentPreviewPage = MaterialSelector.totalPages - 1;
  1659. if( MaterialSelector.currentPreviewPage < 0)
  1660. MaterialSelector.currentPreviewPage = 0;
  1661. MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
  1662. }
  1663. function MaterialSelector::lastPage(%this)
  1664. {
  1665. MaterialSelector.currentPreviewPage = MaterialSelector.totalPages - 1;
  1666. if( MaterialSelector.currentPreviewPage < 0)
  1667. MaterialSelector.currentPreviewPage = 0;
  1668. MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
  1669. }
  1670. function MaterialSelector::selectPage(%this, %page)
  1671. {
  1672. MaterialSelector.currentPreviewPage = %page;
  1673. MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
  1674. }
  1675. function MaterialSelector::thumbnailCountUpdate(%this)
  1676. {
  1677. $Pref::MaterialSelector::ThumbnailCountIndex = MaterialSelector-->materialPreviewCountPopup.getSelected();
  1678. MaterialSelector.LoadFilter( MaterialSelector.currentFilter, MaterialSelector.currentStaticFilter );
  1679. }
  1680. function MaterialSelector::buildPagesButtons(%this, %currentPage, %totalPages)
  1681. {
  1682. // We don't want any more than 8 pages at a time.
  1683. if( %totalPages > 8 )
  1684. {
  1685. // We attempt to display up to 2 pages before the current page
  1686. %start = %currentPage - 2;
  1687. if( %start <= 0 )
  1688. {
  1689. %start = 0;
  1690. %startbracket = false;
  1691. }
  1692. else
  1693. {
  1694. %startbracket = true;
  1695. }
  1696. if( (%totalPages - %start) < 8 )
  1697. {
  1698. // Move %start closer to the beginning to maintain 8 pages
  1699. %start = %totalPages - 8;
  1700. }
  1701. %end = %start + 8;
  1702. if( %end >= %totalPages )
  1703. {
  1704. %end = %totalPages;
  1705. %endbracket = false;
  1706. }
  1707. else
  1708. {
  1709. %endbracket = true;
  1710. }
  1711. }
  1712. else
  1713. {
  1714. %start = 0;
  1715. %end = %totalPages;
  1716. %startbracket = false;
  1717. %endbracket = false;
  1718. }
  1719. if( %startbracket )
  1720. {
  1721. %control = new GuiTextCtrl(){
  1722. profile = "ToolsGuiTextCenterProfile";
  1723. HorizSizing = "right";
  1724. VertSizing = "bottom";
  1725. position = "0 2";
  1726. extent = "14 16";
  1727. MinExtent = "8 8";
  1728. text = "...";
  1729. };
  1730. MaterialSelector-->materialPreviewPagesStack.add( %control );
  1731. }
  1732. for( %i = %start; %i < %end; %i++ )
  1733. {
  1734. if( %i != %currentPage )
  1735. {
  1736. %control = new GuiButtonCtrl() {
  1737. canSaveDynamicFields = "0";
  1738. Enabled = "1";
  1739. isContainer = "0";
  1740. Profile = "ToolsGuiTextCenterProfile";
  1741. HorizSizing = "right";
  1742. VertSizing = "bottom";
  1743. Position = "0 0";
  1744. Extent = "14 16";
  1745. MinExtent = "8 8";
  1746. canSave = "1";
  1747. isDecoy = "0";
  1748. Visible = "1";
  1749. Command = "MaterialSelector.schedule(0, selectPage, " @ %i @ ");";
  1750. tooltipprofile = "ToolsGuiToolTipProfile";
  1751. hovertime = "1000";
  1752. text = %i+1;
  1753. groupNum = "-1";
  1754. buttonType = "PushButton";
  1755. useMouseEvents = "1";
  1756. };
  1757. }
  1758. else
  1759. {
  1760. %control = new GuiTextCtrl(){
  1761. profile = "ToolsGuiTextBoldCenterProfile";
  1762. HorizSizing = "right";
  1763. VertSizing = "bottom";
  1764. position = "0 2";
  1765. extent = "14 16";
  1766. MinExtent = "8 8";
  1767. text = %i+1;
  1768. };
  1769. }
  1770. MaterialSelector-->materialPreviewPagesStack.add( %control );
  1771. }
  1772. if( %endbracket )
  1773. {
  1774. %control = new GuiTextCtrl(){
  1775. profile = "ToolsGuiTextCenterProfile";
  1776. HorizSizing = "right";
  1777. VertSizing = "bottom";
  1778. position = "0 2";
  1779. extent = "14 16";
  1780. MinExtent = "8 8";
  1781. text = "...";
  1782. };
  1783. MaterialSelector-->materialPreviewPagesStack.add( %control );
  1784. }
  1785. }