1 module dlangide.ui.settings; 2 3 import dlangui.core.settings; 4 import dlangui.core.i18n; 5 import dlangui.graphics.fonts; 6 import dlangui.widgets.lists; 7 import dlangui.dialogs.settingsdialog; 8 9 public import dlangide.workspace.projectsettings; 10 public import dlangide.workspace.idesettings; 11 public import dlangide.workspace.workspacesettings; 12 13 /// create DlangIDE settings pages tree 14 SettingsPage createSettingsPages() { 15 SettingsPage res = new SettingsPage("", UIString(""d)); 16 17 SettingsPage ui = res.addChild("interface", UIString("Interface"d)); 18 ui.addStringComboBox("interface/theme", UIString("Theme"d), [ 19 StringListValue("ide_theme_default", "Default"d), 20 StringListValue("ide_theme_dark", "Dark"d)]); 21 ui.addStringComboBox("interface/language", UIString("Language"d), [ 22 StringListValue("en", "English"d), 23 StringListValue("ru", "Russian"d), 24 StringListValue("es", "Spanish"d), 25 StringListValue("cs", "Čeština"d)]); 26 27 ui.addIntComboBox("interface/hintingMode", UIString("Font hinting mode"d), [StringListValue(0, "Normal"d), StringListValue(1, "Force Auto Hint"d), 28 StringListValue(2, "Disabled"d), StringListValue(3, "Light"d)]); 29 ui.addIntComboBox("interface/minAntialiasedFontSize", UIString("Minimum font size for antialiasing"d), 30 [StringListValue(0, "Always ON"d), 31 StringListValue(12, "12"d), 32 StringListValue(14, "14"d), 33 StringListValue(16, "16"d), 34 StringListValue(20, "20"d), 35 StringListValue(24, "24"d), 36 StringListValue(32, "32"d), 37 StringListValue(48, "48"d), 38 StringListValue(255, "Always OFF"d)]); 39 ui.addFloatComboBox("interface/fontGamma", UIString("Font gamma"d), 40 [ 41 StringListValue(500, "0.5 "d), 42 StringListValue(600, "0.6 "d), 43 StringListValue(700, "0.7 "d), 44 StringListValue(800, "0.8 "d), 45 StringListValue(850, "0.85 "d), 46 StringListValue(900, "0.9 "d), 47 StringListValue(950, "0.95 "d), 48 StringListValue(1000, "1.0 "d), 49 StringListValue(1050, "1.05 "d), 50 StringListValue(1100, "1.1 "d), 51 StringListValue(1150, "1.15 "d), 52 StringListValue(1200, "1.2 "d), 53 StringListValue(1250, "1.25 "d), 54 StringListValue(1300, "1.3 "d), 55 StringListValue(1400, "1.4 "d), 56 StringListValue(1500, "1.5 "d), 57 StringListValue(1700, "1.7 "d), 58 StringListValue(2000, "2.0 "d)]); 59 60 SettingsPage ed = res.addChild("editors", UIString("Editors"d)); 61 SettingsPage texted = ed.addChild("editors/textEditor", UIString("Text Editors"d)); 62 63 // font faces 64 StringListValue[] faces; 65 faces ~= StringListValue("Default", "Default"d); 66 import dlangui.graphics.fonts; 67 import std.utf : toUTF32; 68 FontFaceProps[] allFaces = FontManager.instance.getFaces(); 69 import std.algorithm.sorting : sort; 70 auto fontComp = function(ref FontFaceProps a, ref FontFaceProps b) { 71 if (a.family == FontFamily.MonoSpace && b.family != FontFamily.MonoSpace) 72 return -1; 73 if (a.family != FontFamily.MonoSpace && b.family == FontFamily.MonoSpace) 74 return 1; 75 if (a.face < b.face) 76 return -1; 77 if (a.face > b.face) 78 return 1; 79 return 0; 80 }; 81 //auto sorted = allFaces.sort!((a, b) => (a.family == FontFamily.MonoSpace && b.family != FontFamily.MonoSpace) || (a.face < b.face)); 82 auto sorted = sort!((a, b) => fontComp(a, b) < 0)(allFaces); 83 84 //allFaces = allFaces.sort!((a, b) => a.family == FontFamily.MonoSpace && b.family == FontFamily.MonoSpace || a.face < b.face); 85 //for (int i = 0; i < allFaces.length; i++) { 86 foreach (face; sorted) { 87 if (face.family == FontFamily.MonoSpace) 88 faces ~= StringListValue(face.face, "*"d ~ toUTF32(face.face)); 89 else 90 faces ~= StringListValue(face.face, toUTF32(face.face)); 91 } 92 texted.addStringComboBox("editors/textEditor/fontFace", UIString("Font face"d), faces); 93 94 texted.addNumberEdit("editors/textEditor/tabSize", UIString("Tab size"d), 1, 16, 4); 95 texted.addCheckbox("editors/textEditor/useSpacesForTabs", UIString("Use spaces for tabs"d)); 96 texted.addCheckbox("editors/textEditor/smartIndents", UIString("Smart indents"d)); 97 texted.addCheckbox("editors/textEditor/smartIndentsAfterPaste", UIString("Smart indent after paste"d)); 98 texted.addCheckbox("editors/textEditor/showWhiteSpaceMarks", UIString("Show white space marks"d)); 99 texted.addCheckbox("editors/textEditor/showTabPositionMarks", UIString("Show tab position marks"d)); 100 101 102 SettingsPage dlang = res.addChild("dlang", UIString("D"d)); 103 SettingsPage dub = dlang.addChild("dlang/dub", UIString("DUB"d)); 104 dub.addExecutableFileNameEdit("dlang/dub/executable", UIString("DUB executable"d), "dub"); 105 dub.addStringEdit("dlang/dub/additional_params", UIString("DUB additional params"d), ""); 106 SettingsPage rdmd = dlang.addChild("dlang/rdmd", UIString("rdmd"d)); 107 rdmd.addExecutableFileNameEdit("dlang/rdmd/executable", UIString("rdmd executable"d), "rdmd"); 108 rdmd.addStringEdit("dlang/rdmd/additional_params", UIString("rdmd additional params"d), ""); 109 SettingsPage ddebug = dlang.addChild("dlang/debugger", UIString("Debugger"d)); 110 version (Windows) { 111 ddebug.addExecutableFileNameEdit("dlang/debugger/executable", UIString("Debugger executable"d), "gdb"); 112 } else { 113 ddebug.addExecutableFileNameEdit("dlang/debugger/executable", UIString("Debugger executable"d), "mago-mi"); 114 } 115 SettingsPage terminal = dlang.addChild("dlang/terminal", UIString("Terminal"d)); 116 terminal.addExecutableFileNameEdit("dlang/terminal/executable", UIString("Terminal executable"d), "xterm"); 117 118 SettingsPage toolchains = dlang.addChild("dlang/toolchains", UIString("Toolchains"d)); 119 SettingsPage dmdtoolchain = toolchains.addChild("dlang/toolchains/dmd", UIString("DMD"d)); 120 dmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/dmd/executable", UIString("DMD executable"d), "dmd"); 121 dmdtoolchain.addStringEdit("dlang/toolchains/dmd/dub_additional_params", UIString("DUB additional params"d), ""); 122 SettingsPage ldctoolchain = toolchains.addChild("dlang/toolchains/ldc", UIString("LDC"d)); 123 ldctoolchain.addExecutableFileNameEdit("dlang/toolchains/ldc/executable", UIString("LDC2 executable"d), "ldc2"); 124 ldctoolchain.addStringEdit("dlang/toolchains/ldc/dub_additional_params", UIString("DUB additional params"d), ""); 125 SettingsPage ldmdtoolchain = toolchains.addChild("dlang/toolchains/ldmd", UIString("LDMD"d)); 126 ldmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/ldmd/executable", UIString("LDMD2 executable"d), "ldmd2"); 127 ldmdtoolchain.addStringEdit("dlang/toolchains/ldmd/dub_additional_params", UIString("DUB additional params"d), ""); 128 SettingsPage gdctoolchain = toolchains.addChild("dlang/toolchains/gdc", UIString("GDC"d)); 129 gdctoolchain.addExecutableFileNameEdit("dlang/toolchains/gdc/executable", UIString("GDC executable"d), "gdc"); 130 gdctoolchain.addStringEdit("dlang/toolchains/gdc/dub_additional_params", UIString("DUB additional params"d), ""); 131 132 return res; 133 } 134 135 /// create DlangIDE settings pages tree 136 SettingsPage createProjectSettingsPages() { 137 SettingsPage res = new SettingsPage("", UIString(""d)); 138 139 SettingsPage build = res.addChild("build", UIString("Build"d)); 140 build.addStringComboBox("build/toolchain", UIString("Toolchain"d), [ 141 StringListValue("default", "Default"d), 142 StringListValue("dmd", "DMD"d), 143 StringListValue("ldc", "LDC"d), 144 StringListValue("ldmd", "LDMD"d), 145 StringListValue("gdc", "GDC"d)]); 146 build.addStringComboBox("build/arch", UIString("Architecture"d), [ 147 StringListValue("default", "Default"d), 148 StringListValue("x86", "x86"d), 149 StringListValue("x86_64", "x86_64"d), 150 StringListValue("arm", "arm"d), 151 StringListValue("arm64", "arm64"d), 152 ]); 153 build.addCheckbox("build/verbose", UIString("Verbose"d), true); 154 build.addStringEdit("build/dub_additional_params", UIString("DUB additional params"d), ""); 155 156 SettingsPage dbg = res.addChild("debug", UIString("Run and Debug"d)); 157 dbg.addStringEdit("debug/run_args", UIString("Command line args"d), ""); 158 dbg.addDirNameEdit("debug/working_dir", UIString("Working directory"d), ""); 159 dbg.addCheckbox("debug/external_console", UIString("Run in external console"d), true); 160 161 return res; 162 }