1 module dlangide.workspace.idesettings; 2 3 import dlangui.core.settings; 4 import dlangui.core.i18n; 5 import dlangui.graphics.fonts; 6 7 const AVAILABLE_THEMES = ["ide_theme_default", "ide_theme_dark"]; 8 const AVAILABLE_LANGUAGES = ["en", "ru", "es"]; 9 10 class IDESettings : SettingsFile { 11 12 this(string filename) { 13 super(filename); 14 } 15 16 override void updateDefaults() { 17 Setting ed = editorSettings(); 18 ed.setBooleanDef("useSpacesForTabs", true); 19 ed.setIntegerDef("tabSize", 4); 20 ed.setBooleanDef("smartIndents", true); 21 ed.setBooleanDef("smartIndentsAfterPaste", true); 22 Setting ui = uiSettings(); 23 ui.setStringDef("theme", "ide_theme_default"); 24 ui.setStringDef("language", "en"); 25 ui.setIntegerDef("hintingMode", 1); 26 ui.setIntegerDef("minAntialiasedFontSize", 0); 27 ui.setFloatingDef("fontGamma", 0.8); 28 debuggerSettings.setStringDef("executable", "gdb"); 29 terminalSettings.setStringDef("executable", "xterm"); 30 dubSettings.setStringDef("executable", "dub"); 31 dubSettings.setStringDef("additional_params", ""); 32 dmdToolchainSettings.setStringDef("executable", "dmd"); 33 ldcToolchainSettings.setStringDef("executable", "ldc2"); 34 gdcToolchainSettings.setStringDef("executable", "gdc"); 35 } 36 37 /// override to do something after loading - e.g. set defaults 38 override void afterLoad() { 39 } 40 41 @property Setting editorSettings() { 42 Setting res = _setting.objectByPath("editors/textEditor", true); 43 return res; 44 } 45 46 @property Setting uiSettings() { 47 Setting res = _setting.objectByPath("interface", true); 48 return res; 49 } 50 51 @property Setting debuggerSettings() { 52 Setting res = _setting.objectByPath("dlang/debugger", true); 53 return res; 54 } 55 56 @property Setting terminalSettings() { 57 Setting res = _setting.objectByPath("dlang/terminal", true); 58 return res; 59 } 60 61 @property Setting dubSettings() { 62 Setting res = _setting.objectByPath("dlang/dub", true); 63 return res; 64 } 65 66 @property Setting dmdToolchainSettings() { 67 Setting res = _setting.objectByPath("dlang/toolchains/dmd", true); 68 return res; 69 } 70 71 @property Setting ldcToolchainSettings() { 72 Setting res = _setting.objectByPath("dlang/toolchains/ldc", true); 73 return res; 74 } 75 76 @property Setting gdcToolchainSettings() { 77 Setting res = _setting.objectByPath("dlang/toolchains/gdc", true); 78 return res; 79 } 80 81 /// theme 82 @property string uiTheme() { 83 return limitString(uiSettings.getString("theme", "ide_theme_default"), AVAILABLE_THEMES); 84 } 85 /// theme 86 @property IDESettings uiTheme(string v) { 87 uiSettings.setString("theme", limitString(v, AVAILABLE_THEMES)); 88 return this; 89 } 90 91 /// language 92 @property string uiLanguage() { 93 return limitString(uiSettings.getString("language", "en"), AVAILABLE_LANGUAGES); 94 } 95 /// language 96 @property IDESettings uiLanguage(string v) { 97 uiSettings.setString("language", limitString(v, AVAILABLE_LANGUAGES)); 98 return this; 99 } 100 101 /// text editor setting, true if need to insert spaces instead of tabs 102 @property bool useSpacesForTabs() { 103 return editorSettings.getBoolean("useSpacesForTabs", true); 104 } 105 /// text editor setting, true if need to insert spaces instead of tabs 106 @property IDESettings useSpacesForTabs(bool v) { 107 editorSettings.setBoolean("useSpacesForTabs", v); 108 return this; 109 } 110 111 /// text editor setting, true if need to insert spaces instead of tabs 112 @property int tabSize() { 113 return limitInt(editorSettings.getInteger("tabSize", 4), 1, 16); 114 } 115 /// text editor setting, true if need to insert spaces instead of tabs 116 @property IDESettings tabSize(int v) { 117 editorSettings.setInteger("tabSize", limitInt(v, 1, 16)); 118 return this; 119 } 120 121 /// true if smart indents are enabled 122 @property bool smartIndents() { return editorSettings.getBoolean("smartIndents", true); } 123 /// set smart indents enabled flag 124 @property IDESettings smartIndents(bool enabled) { editorSettings.setBoolean("smartIndents", enabled); return this; } 125 126 /// true if smart indents are enabled 127 @property bool smartIndentsAfterPaste() { return editorSettings.getBoolean("smartIndentsAfterPaste", true); } 128 /// set smart indents enabled flag 129 @property IDESettings smartIndentsAfterPaste(bool enabled) { editorSettings.setBoolean("smartIndentsAfterPaste", enabled); return this; } 130 131 @property double fontGamma() { 132 double gamma = uiSettings.getFloating("fontGamma", 1.0); 133 if (gamma >= 0.5 && gamma <= 2.0) 134 return gamma; 135 return 1.0; 136 } 137 138 @property HintingMode hintingMode() { 139 long mode = uiSettings.getInteger("hintingMode", HintingMode.Normal); 140 if (mode >= HintingMode.Normal && mode <= HintingMode.Light) 141 return cast(HintingMode)mode; 142 return HintingMode.Normal; 143 } 144 145 @property int minAntialiasedFontSize() { 146 long sz = uiSettings.getInteger("minAntialiasedFontSize", 0); 147 if (sz >= 0) 148 return cast(int)sz; 149 return 0; 150 } 151 152 @property string debuggerExecutable() { 153 return debuggerSettings.getString("executable", "gdb"); 154 } 155 156 @property string terminalExecutable() { 157 return terminalSettings.getString("executable", "xterm"); 158 } 159 160 @property string dubExecutable() { 161 return dubSettings.getString("executable", "dub"); 162 } 163 164 @property string dubAdditionalParams() { 165 return dubSettings.getString("additional_params", ""); 166 } 167 168 string getToolchainSettings(string toolchainName) { 169 if (toolchainName.equal("dmd")) 170 return dmdToolchainSettings.getString("executable", "dmd"); 171 if (toolchainName.equal("gdc")) 172 return gdcToolchainSettings.getString("executable", "gdc"); 173 if (toolchainName.equal("ldc")) 174 return ldcToolchainSettings.getString("executable", "ldc2"); 175 return null; 176 } 177 178 } 179