1 /* 2 Copyright © 2020, Inochi2D Project 3 Distributed under the 2-Clause BSD License, see LICENSE file. 4 5 Authors: Luna Nielsen 6 */ 7 module creator.windows.settings; 8 import creator.windows; 9 import creator.widgets; 10 import creator.core; 11 import creator.core.i18n; 12 import std.string; 13 import creator.utils.link; 14 import i18n; 15 16 bool incIsSettingsOpen; 17 18 /** 19 Settings window 20 */ 21 class SettingsWindow : Window { 22 private: 23 bool generalTabOpen = true; 24 bool otherTabOpen = true; 25 bool useOpenDyslexic; 26 27 protected: 28 override 29 void onBeginUpdate(int id) { 30 flags |= ImGuiWindowFlags.NoResize; 31 flags |= ImGuiWindowFlags.NoSavedSettings; 32 incIsSettingsOpen = true; 33 super.onBeginUpdate(0); 34 } 35 36 override 37 void onUpdate() { 38 igPushStyleVar(ImGuiStyleVar.ItemSpacing, ImVec2(4, 4)); 39 igBeginChild("SettingsWindowChild", ImVec2(512*incGetUIScale(), 512*incGetUIScale())); 40 if (igBeginTabBar("SettingsWindowTabs", ImGuiTabBarFlags.NoCloseWithMiddleMouseButton)) { 41 if(igBeginTabItem(__("General"), &generalTabOpen, ImGuiTabItemFlagsI.NoCloseButton | ImGuiTabItemFlags.NoCloseWithMiddleMouseButton)) { 42 igBeginChild("#GeneralTabItems", ImVec2(0, -26)); 43 igText(__("Look and Feel")); 44 igSeparator(); 45 if(igBeginCombo(__("Color Theme"), incGetDarkMode() ? __("Dark") : __("Light"))) { 46 if (igSelectable(__("Dark"), incGetDarkMode())) incSetDarkMode(true); 47 if (igSelectable(__("Light"), !incGetDarkMode())) incSetDarkMode(false); 48 49 igEndCombo(); 50 } 51 52 import std.string : toStringz; 53 if(igBeginCombo(__("Language"), incLocaleCurrentName().toStringz)) { 54 if (igSelectable("English")) incLocaleSet(null); 55 foreach(entry; incLocaleGetEntries()) { 56 if (igSelectable(entry.humanNameC)) incLocaleSet(entry.code); 57 } 58 igEndCombo(); 59 } 60 61 if(igBeginCombo(__("UI Scale (EXPERIMENTAL)"), incGetUIScaleText().toStringz)) { 62 if (igSelectable("100%")) incSetUIScale(1.0); 63 if (igSelectable("150%")) incSetUIScale(1.5); 64 if (igSelectable("200%")) incSetUIScale(2.0); 65 66 igEndCombo(); 67 } 68 69 if (incCanUseAppTitlebar) { 70 bool useNative = incGetUseNativeTitlebar(); 71 if (igCheckbox(__("Use Native Titlebar"), &useNative)) { 72 incSettingsSet("UseNativeTitleBar", useNative); 73 incSetUseNativeTitlebar(useNative); 74 } 75 } 76 77 78 igSpacing(); 79 igSpacing(); 80 81 igText("Undo/Redo History"); 82 igSeparator(); 83 84 int maxHistory = cast(int)incActionGetUndoHistoryLength(); 85 if (igSliderInt(__("Max Undo History"), &maxHistory, 0, 1000, "%d")) { 86 incActionSetUndoHistoryLength(maxHistory); 87 } 88 89 igEndChild(); 90 91 igEndTabItem(); 92 } 93 94 if(igBeginTabItem(__("Accessibility"), &generalTabOpen, ImGuiTabItemFlagsI.NoCloseButton | ImGuiTabItemFlags.NoCloseWithMiddleMouseButton)) { 95 96 igBeginChild("#GeneralTabItems", ImVec2(0, -26)); 97 98 igEndChild(); 99 igEndTabItem(); 100 } 101 102 if(igBeginTabItem(__("Other"), &otherTabOpen, ImGuiTabItemFlagsI.NoCloseButton | ImGuiTabItemFlags.NoCloseWithMiddleMouseButton)) { 103 104 igBeginChild("#OtherTabItems", ImVec2(0, -26)); 105 106 igEndChild(); 107 igEndTabItem(); 108 } 109 110 igEndTabBar(); 111 } 112 113 // Save button 114 if (igButton(__("Save"), ImVec2(0, 0))) { 115 this.close(); 116 } 117 118 igEndChild(); 119 igPopStyleVar(); 120 } 121 122 override 123 void onClose() { 124 incSettingsSave(); 125 incIsSettingsOpen = false; 126 } 127 128 public: 129 this() { 130 super(_("Settings")); 131 } 132 }