EditorSettings.as 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. // Urho3D editor settings dialog
  2. bool subscribedToEditorSettings = false;
  3. Window@ settingsDialog;
  4. String defaultTags;
  5. void CreateEditorSettingsDialog()
  6. {
  7. if (settingsDialog !is null)
  8. return;
  9. settingsDialog = LoadEditorUI("UI/EditorSettingsDialog.xml");
  10. ui.root.AddChild(settingsDialog);
  11. settingsDialog.opacity = uiMaxOpacity;
  12. settingsDialog.height = 440;
  13. CenterDialog(settingsDialog);
  14. UpdateEditorSettingsDialog();
  15. HideEditorSettingsDialog();
  16. }
  17. void UpdateEditorSettingsDialog()
  18. {
  19. if (settingsDialog is null)
  20. return;
  21. LineEdit@ nearClipEdit = settingsDialog.GetChild("NearClipEdit", true);
  22. nearClipEdit.text = String(viewNearClip);
  23. LineEdit@ farClipEdit = settingsDialog.GetChild("FarClipEdit", true);
  24. farClipEdit.text = String(viewFarClip);
  25. LineEdit@ fovEdit = settingsDialog.GetChild("FOVEdit", true);
  26. fovEdit.text = String(viewFov);
  27. LineEdit@ speedEdit = settingsDialog.GetChild("SpeedEdit", true);
  28. speedEdit.text = String(cameraBaseSpeed);
  29. CheckBox@ limitRotationToggle = settingsDialog.GetChild("LimitRotationToggle", true);
  30. limitRotationToggle.checked = limitRotation;
  31. DropDownList@ mouseOrbitEdit = settingsDialog.GetChild("MouseOrbitEdit", true);
  32. mouseOrbitEdit.selection = mouseOrbitMode;
  33. CheckBox@ middleMousePanToggle = settingsDialog.GetChild("MiddleMousePanToggle", true);
  34. middleMousePanToggle.checked = mmbPanMode;
  35. CheckBox@ rotateAroundSelectToggle = settingsDialog.GetChild("RotateAroundSelectionToggle", true);
  36. rotateAroundSelectToggle.checked = rotateAroundSelect;
  37. DropDownList@ hotKeysModeEdit = settingsDialog.GetChild("HotKeysModeEdit", true);
  38. hotKeysModeEdit.selection = hotKeyMode;
  39. DropDownList@ newNodeModeEdit = settingsDialog.GetChild("NewNodeModeEdit", true);
  40. newNodeModeEdit.selection = newNodeMode;
  41. LineEdit@ moveStepEdit = settingsDialog.GetChild("MoveStepEdit", true);
  42. moveStepEdit.text = String(moveStep);
  43. CheckBox@ moveSnapToggle = settingsDialog.GetChild("MoveSnapToggle", true);
  44. moveSnapToggle.checked = moveSnap;
  45. LineEdit@ rotateStepEdit = settingsDialog.GetChild("RotateStepEdit", true);
  46. rotateStepEdit.text = String(rotateStep);
  47. CheckBox@ rotateSnapToggle = settingsDialog.GetChild("RotateSnapToggle", true);
  48. rotateSnapToggle.checked = rotateSnap;
  49. LineEdit@ scaleStepEdit = settingsDialog.GetChild("ScaleStepEdit", true);
  50. scaleStepEdit.text = String(scaleStep);
  51. CheckBox@ scaleSnapToggle = settingsDialog.GetChild("ScaleSnapToggle", true);
  52. scaleSnapToggle.checked = scaleSnap;
  53. CheckBox@ applyMaterialListToggle = settingsDialog.GetChild("ApplyMaterialListToggle", true);
  54. applyMaterialListToggle.checked = applyMaterialList;
  55. CheckBox@ rememberResourcePathToggle = settingsDialog.GetChild("RememberResourcePathToggle", true);
  56. rememberResourcePathToggle.checked = rememberResourcePath;
  57. LineEdit@ importOptionsEdit = settingsDialog.GetChild("ImportOptionsEdit", true);
  58. importOptionsEdit.text = importOptions;
  59. DropDownList@ pickModeEdit = settingsDialog.GetChild("PickModeEdit", true);
  60. pickModeEdit.selection = pickMode;
  61. LineEdit@ renderPathNameEdit = settingsDialog.GetChild("RenderPathNameEdit", true);
  62. renderPathNameEdit.text = renderPathName;
  63. Button@ pickRenderPathButton = settingsDialog.GetChild("PickRenderPathButton", true);
  64. DropDownList@ textureQualityEdit = settingsDialog.GetChild("TextureQualityEdit", true);
  65. textureQualityEdit.selection = renderer.textureQuality;
  66. DropDownList@ materialQualityEdit = settingsDialog.GetChild("MaterialQualityEdit", true);
  67. materialQualityEdit.selection = renderer.materialQuality;
  68. DropDownList@ shadowResolutionEdit = settingsDialog.GetChild("ShadowResolutionEdit", true);
  69. shadowResolutionEdit.selection = GetShadowResolution();
  70. DropDownList@ shadowQualityEdit = settingsDialog.GetChild("ShadowQualityEdit", true);
  71. shadowQualityEdit.selection = int(renderer.shadowQuality);
  72. LineEdit@ maxOccluderTrianglesEdit = settingsDialog.GetChild("MaxOccluderTrianglesEdit", true);
  73. maxOccluderTrianglesEdit.text = String(renderer.maxOccluderTriangles);
  74. CheckBox@ specularLightingToggle = settingsDialog.GetChild("SpecularLightingToggle", true);
  75. specularLightingToggle.checked = renderer.specularLighting;
  76. CheckBox@ dynamicInstancingToggle = settingsDialog.GetChild("DynamicInstancingToggle", true);
  77. dynamicInstancingToggle.checked = renderer.dynamicInstancing;
  78. CheckBox@ frameLimiterToggle = settingsDialog.GetChild("FrameLimiterToggle", true);
  79. frameLimiterToggle.checked = engine.maxFps > 0;
  80. CheckBox@ gammaCorrectionToggle = settingsDialog.GetChild("GammaCorrectionToggle", true);
  81. gammaCorrectionToggle.checked = gammaCorrection;
  82. CheckBox@ HDRToggle = settingsDialog.GetChild("HDRToggle", true);
  83. HDRToggle.checked = HDR;
  84. CheckBox@ sRGBToggle = settingsDialog.GetChild("SRGBToggle", true);
  85. sRGBToggle.checked = graphics.sRGB;
  86. LineEdit@ cubemapPath = settingsDialog.GetChild("CubeMapGenPath", true);
  87. cubemapPath.text = cubeMapGen_Path;
  88. LineEdit@ cubemapName = settingsDialog.GetChild("CubeMapGenKey", true);
  89. cubemapName.text = cubeMapGen_Name;
  90. LineEdit@ cubemapSize = settingsDialog.GetChild("CubeMapGenSize", true);
  91. cubemapSize.text = String(cubeMapGen_Size);
  92. LineEdit@ defaultTagsEdit = settingsDialog.GetChild("DefaultTagsEdit", true);
  93. defaultTagsEdit.text = defaultTags.Trimmed();
  94. if (!subscribedToEditorSettings)
  95. {
  96. SubscribeToEvent(nearClipEdit, "TextChanged", "EditCameraNearClip");
  97. SubscribeToEvent(nearClipEdit, "TextFinished", "EditCameraNearClip");
  98. SubscribeToEvent(farClipEdit, "TextChanged", "EditCameraFarClip");
  99. SubscribeToEvent(farClipEdit, "TextFinished", "EditCameraFarClip");
  100. SubscribeToEvent(fovEdit, "TextChanged", "EditCameraFOV");
  101. SubscribeToEvent(fovEdit, "TextFinished", "EditCameraFOV");
  102. SubscribeToEvent(speedEdit, "TextChanged", "EditCameraSpeed");
  103. SubscribeToEvent(speedEdit, "TextFinished", "EditCameraSpeed");
  104. SubscribeToEvent(limitRotationToggle, "Toggled", "EditLimitRotation");
  105. SubscribeToEvent(middleMousePanToggle, "Toggled", "EditMiddleMousePan");
  106. SubscribeToEvent(rotateAroundSelectToggle, "Toggled", "EditRotateAroundSelect");
  107. SubscribeToEvent(mouseOrbitEdit, "ItemSelected", "EditMouseOrbitMode");
  108. SubscribeToEvent(hotKeysModeEdit, "ItemSelected", "EditHotKeyMode");
  109. SubscribeToEvent(newNodeModeEdit, "ItemSelected", "EditNewNodeMode");
  110. SubscribeToEvent(moveStepEdit, "TextChanged", "EditMoveStep");
  111. SubscribeToEvent(moveStepEdit, "TextFinished", "EditMoveStep");
  112. SubscribeToEvent(rotateStepEdit, "TextChanged", "EditRotateStep");
  113. SubscribeToEvent(rotateStepEdit, "TextFinished", "EditRotateStep");
  114. SubscribeToEvent(scaleStepEdit, "TextChanged", "EditScaleStep");
  115. SubscribeToEvent(scaleStepEdit, "TextFinished", "EditScaleStep");
  116. SubscribeToEvent(moveSnapToggle, "Toggled", "EditMoveSnap");
  117. SubscribeToEvent(rotateSnapToggle, "Toggled", "EditRotateSnap");
  118. SubscribeToEvent(scaleSnapToggle, "Toggled", "EditScaleSnap");
  119. SubscribeToEvent(rememberResourcePathToggle, "Toggled", "EditRememberResourcePath");
  120. SubscribeToEvent(applyMaterialListToggle, "Toggled", "EditApplyMaterialList");
  121. SubscribeToEvent(importOptionsEdit, "TextChanged", "EditImportOptions");
  122. SubscribeToEvent(importOptionsEdit, "TextFinished", "EditImportOptions");
  123. SubscribeToEvent(pickModeEdit, "ItemSelected", "EditPickMode");
  124. SubscribeToEvent(renderPathNameEdit, "TextFinished", "EditRenderPathName");
  125. SubscribeToEvent(pickRenderPathButton, "Released", "PickRenderPath");
  126. SubscribeToEvent(textureQualityEdit, "ItemSelected", "EditTextureQuality");
  127. SubscribeToEvent(materialQualityEdit, "ItemSelected", "EditMaterialQuality");
  128. SubscribeToEvent(shadowResolutionEdit, "ItemSelected", "EditShadowResolution");
  129. SubscribeToEvent(shadowQualityEdit, "ItemSelected", "EditShadowQuality");
  130. SubscribeToEvent(maxOccluderTrianglesEdit, "TextChanged", "EditMaxOccluderTriangles");
  131. SubscribeToEvent(maxOccluderTrianglesEdit, "TextFinished", "EditMaxOccluderTriangles");
  132. SubscribeToEvent(specularLightingToggle, "Toggled", "EditSpecularLighting");
  133. SubscribeToEvent(dynamicInstancingToggle, "Toggled", "EditDynamicInstancing");
  134. SubscribeToEvent(frameLimiterToggle, "Toggled", "EditFrameLimiter");
  135. SubscribeToEvent(gammaCorrectionToggle, "Toggled", "EditGammaCorrection");
  136. SubscribeToEvent(HDRToggle, "Toggled", "EditHDR");
  137. SubscribeToEvent(sRGBToggle, "Toggled", "EditSRGB");
  138. SubscribeToEvent(settingsDialog.GetChild("CloseButton", true), "Released", "HideEditorSettingsDialog");
  139. SubscribeToEvent(cubemapPath, "TextChanged", "EditCubemapPath");
  140. SubscribeToEvent(cubemapPath, "TextFinished", "EditCubemapPath");
  141. SubscribeToEvent(cubemapName, "TextChanged", "EditCubemapName");
  142. SubscribeToEvent(cubemapName, "TextFinished", "EditCubemapName");
  143. SubscribeToEvent(cubemapSize, "TextChanged", "EditCubemapSize");
  144. SubscribeToEvent(cubemapSize, "TextFinished", "EditCubemapSize");
  145. SubscribeToEvent(defaultTagsEdit, "TextFinished", "EditDefaultTags");
  146. subscribedToEditorSettings = true;
  147. }
  148. }
  149. bool ToggleEditorSettingsDialog()
  150. {
  151. if (settingsDialog.visible == false)
  152. ShowEditorSettingsDialog();
  153. else
  154. HideEditorSettingsDialog();
  155. return true;
  156. }
  157. void ShowEditorSettingsDialog()
  158. {
  159. UpdateEditorSettingsDialog();
  160. settingsDialog.visible = true;
  161. settingsDialog.BringToFront();
  162. }
  163. void HideEditorSettingsDialog()
  164. {
  165. settingsDialog.visible = false;
  166. }
  167. void EditCameraNearClip(StringHash eventType, VariantMap& eventData)
  168. {
  169. LineEdit@ edit = eventData["Element"].GetPtr();
  170. viewNearClip = edit.text.ToFloat();
  171. UpdateViewParameters();
  172. if (eventType == StringHash("TextFinished"))
  173. edit.text = String(camera.nearClip);
  174. }
  175. void EditCameraFarClip(StringHash eventType, VariantMap& eventData)
  176. {
  177. LineEdit@ edit = eventData["Element"].GetPtr();
  178. viewFarClip = edit.text.ToFloat();
  179. UpdateViewParameters();
  180. if (eventType == StringHash("TextFinished"))
  181. edit.text = String(camera.farClip);
  182. }
  183. void EditCameraFOV(StringHash eventType, VariantMap& eventData)
  184. {
  185. LineEdit@ edit = eventData["Element"].GetPtr();
  186. viewFov = edit.text.ToFloat();
  187. UpdateViewParameters();
  188. if (eventType == StringHash("TextFinished"))
  189. edit.text = String(camera.fov);
  190. }
  191. void EditCameraSpeed(StringHash eventType, VariantMap& eventData)
  192. {
  193. LineEdit@ edit = eventData["Element"].GetPtr();
  194. cameraBaseSpeed = Max(edit.text.ToFloat(), 1.0);
  195. if (eventType == StringHash("TextFinished"))
  196. edit.text = String(cameraBaseSpeed);
  197. }
  198. void EditLimitRotation(StringHash eventType, VariantMap& eventData)
  199. {
  200. CheckBox@ edit = eventData["Element"].GetPtr();
  201. limitRotation = edit.checked;
  202. }
  203. void EditMouseOrbitMode(StringHash eventType, VariantMap& eventData)
  204. {
  205. DropDownList@ edit = eventData["Element"].GetPtr();
  206. mouseOrbitMode = edit.selection;
  207. }
  208. void EditMiddleMousePan(StringHash eventType, VariantMap& eventData)
  209. {
  210. mmbPanMode = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
  211. }
  212. void EditRotateAroundSelect(StringHash eventType, VariantMap& eventData)
  213. {
  214. rotateAroundSelect = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
  215. }
  216. void EditHotKeyMode(StringHash eventType, VariantMap& eventData)
  217. {
  218. DropDownList@ edit = eventData["Element"].GetPtr();
  219. hotKeyMode = edit.selection;
  220. MessageBox("Please, restart Urho editor for applying changes.\n", " Notify ");
  221. }
  222. void EditNewNodeMode(StringHash eventType, VariantMap& eventData)
  223. {
  224. DropDownList@ edit = eventData["Element"].GetPtr();
  225. newNodeMode = edit.selection;
  226. }
  227. void EditMoveStep(StringHash eventType, VariantMap& eventData)
  228. {
  229. LineEdit@ edit = eventData["Element"].GetPtr();
  230. moveStep = Max(edit.text.ToFloat(), 0.0);
  231. if (eventType == StringHash("TextFinished"))
  232. edit.text = String(moveStep);
  233. }
  234. void EditRotateStep(StringHash eventType, VariantMap& eventData)
  235. {
  236. LineEdit@ edit = eventData["Element"].GetPtr();
  237. rotateStep = Max(edit.text.ToFloat(), 0.0);
  238. if (eventType == StringHash("TextFinished"))
  239. edit.text = String(rotateStep);
  240. }
  241. void EditScaleStep(StringHash eventType, VariantMap& eventData)
  242. {
  243. LineEdit@ edit = eventData["Element"].GetPtr();
  244. scaleStep = Max(edit.text.ToFloat(), 0.0);
  245. if (eventType == StringHash("TextFinished"))
  246. edit.text = String(scaleStep);
  247. }
  248. void EditMoveSnap(StringHash eventType, VariantMap& eventData)
  249. {
  250. CheckBox@ edit = eventData["Element"].GetPtr();
  251. moveSnap = edit.checked;
  252. toolBarDirty = true;
  253. }
  254. void EditRotateSnap(StringHash eventType, VariantMap& eventData)
  255. {
  256. CheckBox@ edit = eventData["Element"].GetPtr();
  257. rotateSnap = edit.checked;
  258. toolBarDirty = true;
  259. }
  260. void EditScaleSnap(StringHash eventType, VariantMap& eventData)
  261. {
  262. CheckBox@ edit = eventData["Element"].GetPtr();
  263. scaleSnap = edit.checked;
  264. toolBarDirty = true;
  265. }
  266. void EditRememberResourcePath(StringHash eventType, VariantMap& eventData)
  267. {
  268. CheckBox@ edit = eventData["Element"].GetPtr();
  269. rememberResourcePath = edit.checked;
  270. }
  271. void EditApplyMaterialList(StringHash eventType, VariantMap& eventData)
  272. {
  273. CheckBox@ edit = eventData["Element"].GetPtr();
  274. applyMaterialList = edit.checked;
  275. }
  276. void EditImportOptions(StringHash eventType, VariantMap& eventData)
  277. {
  278. LineEdit@ edit = eventData["Element"].GetPtr();
  279. importOptions = edit.text.Trimmed();
  280. }
  281. void EditPickMode(StringHash eventType, VariantMap& eventData)
  282. {
  283. DropDownList@ edit = eventData["Element"].GetPtr();
  284. pickMode = edit.selection;
  285. }
  286. void EditRenderPathName(StringHash eventType, VariantMap& eventData)
  287. {
  288. LineEdit@ edit = eventData["Element"].GetPtr();
  289. SetRenderPath(edit.text);
  290. }
  291. void PickRenderPath(StringHash eventType, VariantMap& eventData)
  292. {
  293. CreateFileSelector("Load render path", "Load", "Cancel", uiRenderPathPath, uiRenderPathFilters, uiRenderPathFilter);
  294. SubscribeToEvent(uiFileSelector, "FileSelected", "HandleLoadRenderPath");
  295. }
  296. void HandleLoadRenderPath(StringHash eventType, VariantMap& eventData)
  297. {
  298. CloseFileSelector(uiRenderPathFilter, uiRenderPathPath);
  299. SetRenderPath(GetResourceNameFromFullName(ExtractFileName(eventData)));
  300. LineEdit@ renderPathNameEdit = settingsDialog.GetChild("RenderPathNameEdit", true);
  301. renderPathNameEdit.text = renderPathName;
  302. }
  303. void EditTextureQuality(StringHash eventType, VariantMap& eventData)
  304. {
  305. DropDownList@ edit = eventData["Element"].GetPtr();
  306. renderer.textureQuality = edit.selection;
  307. }
  308. void EditMaterialQuality(StringHash eventType, VariantMap& eventData)
  309. {
  310. DropDownList@ edit = eventData["Element"].GetPtr();
  311. renderer.materialQuality = edit.selection;
  312. }
  313. void EditShadowResolution(StringHash eventType, VariantMap& eventData)
  314. {
  315. DropDownList@ edit = eventData["Element"].GetPtr();
  316. SetShadowResolution(edit.selection);
  317. }
  318. void EditShadowQuality(StringHash eventType, VariantMap& eventData)
  319. {
  320. DropDownList@ edit = eventData["Element"].GetPtr();
  321. renderer.shadowQuality = ShadowQuality(edit.selection);
  322. }
  323. void EditMaxOccluderTriangles(StringHash eventType, VariantMap& eventData)
  324. {
  325. LineEdit@ edit = eventData["Element"].GetPtr();
  326. renderer.maxOccluderTriangles = edit.text.ToInt();
  327. if (eventType == StringHash("TextFinished"))
  328. edit.text = String(renderer.maxOccluderTriangles);
  329. }
  330. void EditSpecularLighting(StringHash eventType, VariantMap& eventData)
  331. {
  332. CheckBox@ edit = eventData["Element"].GetPtr();
  333. renderer.specularLighting = edit.checked;
  334. }
  335. void EditDynamicInstancing(StringHash eventType, VariantMap& eventData)
  336. {
  337. CheckBox@ edit = eventData["Element"].GetPtr();
  338. renderer.dynamicInstancing = edit.checked;
  339. }
  340. void EditFrameLimiter(StringHash eventType, VariantMap& eventData)
  341. {
  342. CheckBox@ edit = eventData["Element"].GetPtr();
  343. engine.maxFps = edit.checked ? 200 : 0;
  344. }
  345. void EditGammaCorrection(StringHash eventType, VariantMap& eventData)
  346. {
  347. CheckBox@ edit = eventData["Element"].GetPtr();
  348. SetGammaCorrection(edit.checked);
  349. }
  350. void EditHDR(StringHash eventType, VariantMap& eventData)
  351. {
  352. CheckBox@ edit = eventData["Element"].GetPtr();
  353. SetHDR(edit.checked);
  354. }
  355. void EditSRGB(StringHash eventType, VariantMap& eventData)
  356. {
  357. CheckBox@ edit = eventData["Element"].GetPtr();
  358. graphics.sRGB = edit.checked;
  359. }
  360. void EditCubemapPath(StringHash eventType, VariantMap& eventData)
  361. {
  362. LineEdit@ edit = eventData["Element"].GetPtr();
  363. cubeMapGen_Path = edit.text;
  364. }
  365. void EditCubemapName(StringHash eventType, VariantMap& eventData)
  366. {
  367. LineEdit@ edit = eventData["Element"].GetPtr();
  368. cubeMapGen_Name = edit.text;
  369. }
  370. void EditCubemapSize(StringHash eventType, VariantMap& eventData)
  371. {
  372. LineEdit@ edit = eventData["Element"].GetPtr();
  373. cubeMapGen_Size = edit.text.ToInt();
  374. }
  375. void EditDefaultTags(StringHash eventType, VariantMap& eventData)
  376. {
  377. LineEdit@ edit = eventData["Element"].GetPtr();
  378. defaultTags = edit.text;
  379. }