X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ide%2Fsrc%2Fdialogs%2FGlobalSettingsDialog.ec;h=370a770b0c973cff766871d11c2dbc1140eb475a;hb=06fe11ea73224b7ad6d6562ce0259ae5d6ea1842;hp=620bb2c1a936b4d4123a843ccb045e309ed93f44;hpb=772625709a1a88f76d3d736385aa3c340525d0de;p=sdk diff --git a/ide/src/dialogs/GlobalSettingsDialog.ec b/ide/src/dialogs/GlobalSettingsDialog.ec index 620bb2c..370a770 100644 --- a/ide/src/dialogs/GlobalSettingsDialog.ec +++ b/ide/src/dialogs/GlobalSettingsDialog.ec @@ -19,8 +19,6 @@ class GlobalSettingsDialog : Window minClientSize = { 560, 542 }; nativeDecorations = true; - IDESettings ideSettings; - IDESettingsContainer settingsContainer; String workspaceActiveCompiler; TabControl tabControl { this, background = formColor, anchor = { left = 8, top = 8, right = 8, bottom = 40 } }; @@ -71,15 +69,36 @@ class GlobalSettingsDialog : Window bool editorSettingsChanged = false; bool compilerSettingsChanged = false; bool projectOptionsChanged = false; + AVLTree cfgsToWrite = null; if(editorTab.modifiedDocument) { if(editorTab.useFreeCaret.checked != ideSettings.useFreeCaret || editorTab.showLineNumbers.checked != ideSettings.showLineNumbers || - editorTab.caretFollowsScrolling.checked != ideSettings.caretFollowsScrolling) + editorTab.caretFollowsScrolling.checked != ideSettings.caretFollowsScrolling || + editorTab.fontPicker.fontSize != ideSettings.codeEditorFontSize || + editorTab.fontPicker.faceName.OnCompare(ideSettings.codeEditorFont) || + editorTab.dbColorSchemes.currentRow.string.OnCompare(ideSettings.activeColorScheme) + ) { + DataRow csRow = editorTab.dbColorSchemes.currentRow; ideSettings.useFreeCaret = editorTab.useFreeCaret.checked; ideSettings.showLineNumbers = editorTab.showLineNumbers.checked; ideSettings.caretFollowsScrolling = editorTab.caretFollowsScrolling.checked; + ideSettings.codeEditorFont = editorTab.fontPicker.faceName; + ideSettings.codeEditorFontSize = editorTab.fontPicker.fontSize; + if(csRow && csRow.string) + { + ideSettings.activeColorScheme = csRow.string; + for(cs : ideSettings.colorSchemes; cs.name && !strcmp(cs.name, csRow.string)) + { + colorScheme = cs; + ide.ApplyColorScheme(colorScheme); + break; + } + } + + ide.ApplyFont(ideSettings.codeEditorFont, ideSettings.codeEditorFontSize); + editorSettingsChanged = true; } } @@ -88,13 +107,16 @@ class GlobalSettingsDialog : Window { if(strcmp(compilersTab.compilerConfigsDir.path, ideSettings.compilerConfigsDir)) ideSettings.compilerConfigsDir = compilersTab.compilerConfigsDir.path; - ideSettings.compilerConfigs.Free(); - for(compiler : compilersTab.compilerConfigs) + if(compilersTab.compilerConfigs.OnCompare(ideConfig.compilers)) { - ideSettings.compilerConfigs.Add(compiler.Copy()); + cfgsToWrite = compilersTab.compilerConfigs.getWriteRequiredList(ideConfig.compilers); + ideConfig.compilers.Free(); + for(compiler : compilersTab.compilerConfigs) + { + ideConfig.compilers.Add(compiler.Copy()); + } + compilerSettingsChanged = true; } - - compilerSettingsChanged = true; } if(projectOptionsTab.modifiedDocument) @@ -120,10 +142,16 @@ class GlobalSettingsDialog : Window } } - settingsContainer.Save(); + if(editorSettingsChanged || projectOptionsChanged) + settingsContainer.Save(); if(compilerSettingsChanged) + { + ideConfig.compilers.write(settingsContainer, cfgsToWrite); OnGlobalSettingChange(GlobalSettingsChange::compilerSettings); + cfgsToWrite.Free(); + delete cfgsToWrite; + } if(editorSettingsChanged) OnGlobalSettingChange(GlobalSettingsChange::editorSettings); if(projectOptionsChanged) @@ -175,7 +203,7 @@ class GlobalSettingsDialog : Window // CompilersTab if(workspaceActiveCompiler) { - for(compiler : ideSettings.compilerConfigs) + for(compiler : ideConfig.compilers) { if(!activateCompiler && !strcmp(workspaceActiveCompiler, compiler.name)) activateCompiler = compiler; @@ -187,10 +215,10 @@ class GlobalSettingsDialog : Window } if(!activateCompiler && readonlyCompiler) activateCompiler = readonlyCompiler; - if(!activateCompiler && ideSettings.compilerConfigs.count) - activateCompiler = ideSettings.compilerConfigs[0]; + if(!activateCompiler && ideConfig.compilers.count) + activateCompiler = ideConfig.compilers[0]; - for(compiler : ideSettings.compilerConfigs) + for(compiler : ideConfig.compilers) compilersTab.AddCompiler(compiler.Copy(), compiler == activateCompiler); compilersTab.compilerConfigsDir.path = ideSettings.compilerConfigsDir; @@ -218,26 +246,63 @@ class GlobalSettingsDialog : Window virtual void OnGlobalSettingChange(GlobalSettingsChange globalSettingsChange); } +import "FontPicker" + class EditorTab : GlobalSettingsSubTab { background = formColor; text = $"Editor"; + bool OnCreate() + { + dbColorSchemes.Clear(); + + for(s : ideSettings.colorSchemes) + { + DataRow row = dbColorSchemes.AddString(s.name); + if(!strcmp(s.name, ideSettings.activeColorScheme)) + dbColorSchemes.currentRow = row; + } + return true; + } + + Label lblColorSchemes { this, anchor = { top = 70, right = 16 }, labeledWindow = dbColorSchemes }; + DropBox dbColorSchemes + { + this, text = $"Color Scheme: ", anchor = { top = 92, right = 16 }, size = { 200, 22 }; + + bool NotifySelect(DropBox dropBox, DataRow row, Modifiers mods) + { + if(row) + { + IDEColorScheme colorScheme = null; + for(cs : ideSettings.colorSchemes; cs.name && !strcmp(cs.name, row.string)) + { + colorScheme = cs; + break; + } + fontPicker.SelectColorScheme(colorScheme); + modifiedDocument = true; + } + return true; + } + }; + Button useFreeCaret { - this, text = $"Move code editor caret freely past end of line", position = { 16, 68 }, isCheckbox = true; + this, text = $"Move code editor caret freely past end of line", position = { 16, 58 }, isCheckbox = true; NotifyClicked = NotifyClickedModifiedDocument; }; Button caretFollowsScrolling { - this, text = $"Keep caret visible (move along) when scrolling", position = { 16, 88 }, isCheckbox = true; + this, text = $"Keep caret visible (move along) when scrolling", position = { 16, 78 }, isCheckbox = true; NotifyClicked = NotifyClickedModifiedDocument; }; Button showLineNumbers { - this, text = $"Show line numbers in code editor", position = { 16, 108 }, isCheckbox = true; + this, text = $"Show line numbers in code editor", position = { 16, 98 }, isCheckbox = true; NotifyClicked = NotifyClickedModifiedDocument; }; @@ -246,6 +311,17 @@ class EditorTab : GlobalSettingsSubTab modifiedDocument = true; return true; } + + FontPicker fontPicker + { + this, anchor = { left = 8, right = 8, top = 120, bottom = 8 }; + + bool NotifyChanged() + { + modifiedDocument = true; + return true; + } + }; } static void DrawStipple(Surface surface, Size clientSize) @@ -278,7 +354,10 @@ class CompilersTab : GlobalSettingsSubTab { this, text = $"Compiler Configurations:", anchor = { left = 148, top = 38, right = 99 }; size = { 0, 26 }; opacity = 0; - direction = horizontal, scrollable = true; + direction = horizontal; + scrollable = true; + endButtons = false; + hoverScroll = true; bool OnKeyDown(Key key, unichar ch) { @@ -324,7 +403,7 @@ class CompilersTab : GlobalSettingsSubTab CompilerEnvironmentTab environmentTab { this, tabControl = tabControl }; CompilerOptionsTab optionsTab { this, tabControl = tabControl }; - List compilerConfigs { }; + CompilerConfigs compilerConfigs { }; CompilerConfig activeCompiler; Label labelCompilers @@ -851,7 +930,8 @@ class CompilerToolchainTab : CompilersSubTab cppLabel.disabled = cpp.disabled = isVC || disabled; cxxLabel.disabled = cxx.disabled = isVC || disabled; ccLabel.disabled = cc.disabled = isVC || disabled; - ldLabel.disabled = cxx.disabled = isVC || disabled; + ldLabel.disabled = ld.disabled = isVC || disabled; + arLabel.disabled = ar.disabled = isVC || disabled; makeLabel.disabled = make.disabled = disabled; executableLauncherLabel.disabled = executableLauncher.disabled = disabled; gnuToolchainPrefixLabel.disabled = gnuToolchainPrefix.disabled = disabled; @@ -985,7 +1065,7 @@ class CompilerOptionsTab : CompilersSubTab Button distccEnabled { - this, text = $"Use distcc", hotKey = altD, position = { 158, 68 }; + this, text = $"Use distcc", position = { 158, 68 }; isCheckbox = true; bool NotifyClicked(Button button, int x, int y, Modifiers mods) @@ -993,7 +1073,7 @@ class CompilerOptionsTab : CompilersSubTab CompilerConfig compiler = loadedCompiler; if(compiler) { - distccHosts.disabled = !button.checked; + distccHostsLabel.disabled = distccHosts.disabled = !button.checked; compiler.distccEnabled = button.checked; modifiedDocument = true; compilersTab.modifiedDocument = true; @@ -1002,11 +1082,11 @@ class CompilerOptionsTab : CompilersSubTab } }; - Label distccHostsLabel { this, position = { 8, 96 }, labeledWindow = distccHosts }; + Label distccHostsLabel { this, position = { 240, 68 }, labeledWindow = distccHosts }; EditBox distccHosts { this, text = $"distcc hosts", hotKey = altH; - position = { 88, 92 }, size = { 300, 22 }; + position = { 320, 64 }, size = { 160, 22 }; bool NotifyModified(EditBox editBox) { @@ -1021,11 +1101,11 @@ class CompilerOptionsTab : CompilersSubTab } }; - Label lblPrepDefs { this, position = { 8, 126 }, labeledWindow = prepDefs }; + Label lblPrepDefs { this, position = { 8, 96 }, labeledWindow = prepDefs }; StringListBox prepDefs { this, text = $"Preprocessor directives", hotKey = altP; - position = { 168, 124 }, size = { 280, 22 }, anchor = { left = 168, top = 124, right = 8 }; + position = { 168, 94 }, size = { 280, 22 }, anchor = { left = 168, top = 94, right = 8 }; bool NotifyModified(EditBox editBox) { @@ -1040,11 +1120,11 @@ class CompilerOptionsTab : CompilersSubTab } }; - Label leCcompilerFlags { this, position = { 8, 156 }, labeledWindow = eCcompilerFlags }; + Label leCcompilerFlags { this, position = { 8, 126 }, labeledWindow = eCcompilerFlags }; StringListBox eCcompilerFlags { this, text = $"Additional eC compiler flags", hotKey = altG; - position = { 168, 154 }, size = { 280, 22 }, anchor = { left = 168, top = 154, right = 8 }; + position = { 168, 124 }, size = { 280, 22 }, anchor = { left = 168, top = 124, right = 8 }; bool NotifyModified(EditBox editBox) { @@ -1059,11 +1139,11 @@ class CompilerOptionsTab : CompilersSubTab } }; - Label lblCompilerFlags { this, position = { 8, 186 }, labeledWindow = compilerFlags }; + Label lblCompilerFlags { this, position = { 8, 156 }, labeledWindow = compilerFlags }; StringListBox compilerFlags { - this, text = $"Additional compiler flags", hotKey = altR; - position = { 168, 184 }, size = { 280, 22 }, anchor = { left = 168, top = 184, right = 8 }; + this, text = $"Additional C compiler flags", hotKey = altR; + position = { 168, 154 }, size = { 280, 22 }, anchor = { left = 168, top = 154, right = 8 }; bool NotifyModified(EditBox editBox) { @@ -1078,6 +1158,25 @@ class CompilerOptionsTab : CompilersSubTab } }; + Label lblcxxFlags { this, position = { 8, 186 }, labeledWindow = cxxFlags }; + StringListBox cxxFlags + { + this, text = $"Additional C++ compiler flags", hotKey = altD; + position = { 168, 184 }, size = { 280, 22 }, anchor = { left = 168, top = 184, right = 8 }; + + bool NotifyModified(EditBox editBox) + { + if(loadedCompiler) + { + CompilerConfig compiler = loadedCompiler; + compiler.cxxFlags = ((StringListBox)editBox).strings; + modifiedDocument = true; + compilersTab.modifiedDocument = true; + } + return true; + } + }; + Label lblLinkerFlags { this, position = { 8, 216 }, labeledWindow = linkerFlags }; StringListBox linkerFlags { @@ -1135,10 +1234,10 @@ class CompilerOptionsTab : CompilersSubTab } }; - Label outputFileExtLabel { this, position = { 8, 306 }, labeledWindow = outputFileExt }; - EditBox outputFileExt + Label staticLibFileExtLabel { this, position = { 8, 306 }, labeledWindow = staticLibFileExt }; + EditBox staticLibFileExt { - this, text = $"Output file extension";//, hotKey = altH; + this, text = $"Target extensions (a, so, exe)";//, hotKey = altH; position = { 168, 304 }, size = { 80, 22 }; bool NotifyModified(EditBox editBox) @@ -1146,7 +1245,77 @@ class CompilerOptionsTab : CompilersSubTab CompilerConfig compiler = loadedCompiler; if(compiler) { - compiler.outputFileExt = editBox.contents; + compiler.staticLibFileExt = editBox.contents; + modifiedDocument = true; + compilersTab.modifiedDocument = true; + } + return true; + } + }; + EditBox sharedLibFileExt + { + this; + position = { 256, 304 }, size = { 80, 22 }; + + bool NotifyModified(EditBox editBox) + { + CompilerConfig compiler = loadedCompiler; + if(compiler) + { + compiler.sharedLibFileExt = editBox.contents; + modifiedDocument = true; + compilersTab.modifiedDocument = true; + } + return true; + } + }; + EditBox executableFileExt + { + this; + position = { 344, 304 }, size = { 80, 22 }; + + bool NotifyModified(EditBox editBox) + { + CompilerConfig compiler = loadedCompiler; + if(compiler) + { + compiler.executableFileExt = editBox.contents; + modifiedDocument = true; + compilersTab.modifiedDocument = true; + } + return true; + } + }; + + Button stripTarget + { + this, text = $"Strip target", hotKey = altC, position = { 168, 332 }; + isCheckbox = true; + + bool NotifyClicked(Button button, int x, int y, Modifiers mods) + { + CompilerConfig compiler = loadedCompiler; + if(compiler) + { + compiler.noStripTarget = !button.checked; + modifiedDocument = true; + compilersTab.modifiedDocument = true; + } + return true; + } + }; + + Button resourcesDotEar + { + this, text = $"Use resources.ear", position = { 308, 332 }; + isCheckbox = true; + + bool NotifyClicked(Button button, int x, int y, Modifiers mods) + { + CompilerConfig compiler = loadedCompiler; + if(compiler) + { + compiler.resourcesDotEar = button.checked; modifiedDocument = true; compilersTab.modifiedDocument = true; } @@ -1177,15 +1346,20 @@ class CompilerOptionsTab : CompilersSubTab numJobsBox.Refresh(); ccacheEnabled.checked = compiler.ccacheEnabled; distccEnabled.checked = compiler.distccEnabled; - distccHosts.disabled = !compiler.distccEnabled; + distccHostsLabel.disabled = distccHosts.disabled = !compiler.distccEnabled; distccHosts.contents = compiler.distccHosts; prepDefs.strings = compiler.prepDirectives; excludedLibraries.strings = compiler.excludeLibs; eCcompilerFlags.strings = compiler.eCcompilerFlags; compilerFlags.strings = compiler.compilerFlags; + cxxFlags.strings = compiler.cxxFlags; linkerFlags.strings = compiler.linkerFlags; objectFileExt.contents = compiler.objectFileExt; - outputFileExt.contents = compiler.outputFileExt; + staticLibFileExt.contents = compiler.staticLibFileExt; + sharedLibFileExt.contents = compiler.sharedLibFileExt; + executableFileExt.contents = compiler.executableFileExt; + stripTarget.checked = !compiler.noStripTarget; + resourcesDotEar.checked = compiler.resourcesDotEar; labelTargetPlatform.disabled = disabled; targetPlatform.disabled = disabled; @@ -1289,14 +1463,14 @@ class WorkspaceOptionsTab : GlobalSettingsSubTab bool OnCreate() { GlobalSettingsDialog dialog = this.dialog; - if(dialog && dialog.compilersTab.compilerConfigs && dialog.ideSettings) + if(dialog && dialog.compilersTab.compilerConfigs && ideSettings) { DataRow row; - for(compiler : dialog.ideSettings.compilerConfigs) + for(compiler : ideConfig.compilers) { row = defaultCompilerDropBox.AddString(compiler.name); - if(dialog.ideSettings.defaultCompiler && dialog.ideSettings.defaultCompiler[0] && - !strcmp(compiler.name, dialog.ideSettings.defaultCompiler)) + if(ideSettings.defaultCompiler && ideSettings.defaultCompiler[0] && + !strcmp(compiler.name, ideSettings.defaultCompiler)) defaultCompilerDropBox.currentRow = row; } if(!defaultCompilerDropBox.currentRow && defaultCompilerDropBox)