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() { 30 flags |= ImGuiWindowFlags.NoResize; 31 flags |= ImGuiWindowFlags.NoSavedSettings; 32 incIsSettingsOpen = true; 33 super.onBeginUpdate(); 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 version(linux) { 78 bool disableCompositor = incSettingsGet!bool("DisableCompositor"); 79 if (igCheckbox(__("Disable Compositor"), &disableCompositor)) { 80 incSettingsSet("DisableCompositor", disableCompositor); 81 } 82 } 83 84 85 igSpacing(); 86 igSpacing(); 87 88 igText("Undo/Redo History"); 89 igSeparator(); 90 91 int maxHistory = cast(int)incActionGetUndoHistoryLength(); 92 if (igSliderInt(__("Max Undo History"), &maxHistory, 0, 1000, "%d")) { 93 incActionSetUndoHistoryLength(maxHistory); 94 } 95 96 igEndChild(); 97 98 igEndTabItem(); 99 } 100 101 if(igBeginTabItem(__("Accessibility"), &generalTabOpen, ImGuiTabItemFlagsI.NoCloseButton | ImGuiTabItemFlags.NoCloseWithMiddleMouseButton)) { 102 103 igBeginChild("#GeneralTabItems", ImVec2(0, -26)); 104 105 igEndChild(); 106 igEndTabItem(); 107 } 108 109 if(igBeginTabItem(__("Other"), &otherTabOpen, ImGuiTabItemFlagsI.NoCloseButton | ImGuiTabItemFlags.NoCloseWithMiddleMouseButton)) { 110 111 igBeginChild("#OtherTabItems", ImVec2(0, -26)); 112 113 igEndChild(); 114 igEndTabItem(); 115 } 116 117 igEndTabBar(); 118 } 119 120 // Save button 121 if (igButton(__("Save"), ImVec2(0, 0))) { 122 this.close(); 123 } 124 125 igEndChild(); 126 igPopStyleVar(); 127 } 128 129 override 130 void onClose() { 131 incSettingsSave(); 132 incIsSettingsOpen = false; 133 } 134 135 public: 136 this() { 137 super(_("Settings")); 138 } 139 }