define pathListSep = ":";
#endif
+IDEConfigHolder ideConfig { };
+
+FontResource panelFont { $"Courier New", 10 };
+FontResource codeFont { $"Courier New", 10 };
+
+IDESettings ideSettings;
+
+IDESettingsContainer settingsContainer
+{
+ dataOwner = &ideSettings;
+ dataClass = class(IDESettings);
+
+ void onLoadCompilerConfigs() { ide.UpdateCompilerConfigs(true); }
+ void onLoadRecentFiles() { ide.updateRecentFilesMenu(); }
+ void onLoadRecentProjects() { ide.updateRecentProjectsMenu(); }
+ void onLoad() { ide.ApplyColorScheme(colorScheme); ide.ApplyFont(ideSettings.codeEditorFont, ideSettings.codeEditorFontSize); }
+};
+
define maxPathLen = 65 * MAX_LOCATION;
class PathBackup : struct
GlobalSettingsDialog globalSettingsDialog
{
- ideSettings = ideSettings;
- settingsContainer = settingsContainer;
-
void OnGlobalSettingChange(GlobalSettingsChange globalSettingsChange)
{
switch(globalSettingsChange)
this, toolTip = $"Active Compiler", size = { 160 }, disabled = true;
bool NotifySelect(DropBox dropBox, DataRow row, Modifiers mods)
{
- if(ide.workspace && ide.projectView && row && strcmp(row.string, ide.workspace.compiler))
+ if(ide.workspace && ide.projectView && row && strcmp(row.string, ide.workspace.activeCompiler))
{
bool silent = ide.projectView.buildInProgress == none ? false : true;
- CompilerConfig compiler = ideSettings.GetCompilerConfig(row.string);
- ide.workspace.compiler = row.string;
+ CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(row.string);
+ ide.workspace.activeCompiler = row.string;
ide.projectView.ShowOutputBuildLog(!silent);
if(!silent)
ide.projectView.DisplayCompiler(compiler, false);
if(ide.workspace && ide.projectView && row)
{
bool silent = ide.projectView.buildInProgress == none ? false : true;
- CompilerConfig compiler = ideSettings.GetCompilerConfig(ide.workspace.compiler);
+ CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(ide.workspace.activeCompiler);
ide.workspace.bitDepth = (int)row.tag;
ide.projectView.ShowOutputBuildLog(!silent);
if(!silent)
BitmapResource bmpTopFrameHalf { ":codeMarks/topFrameHalf.png", window = this };
BitmapResource bmpTopFrameHalfError { ":codeMarks/topFrameHalfError.png", window = this };
+ BuildOutputMode rightClickMenuBuildOutputMode;
+
Debugger debugger { };
+ void ApplyFont(const String faceName, float size)
+ {
+ panelFont.faceName = faceName;
+ panelFont.size = size;
+
+ codeFont.faceName = faceName;
+ codeFont.size = size;
+
+ {
+ CodeEditor ce;
+ for(ce = (CodeEditor)firstChild; ce; ce = (CodeEditor)ce.next)
+ if(ce._class == class(CodeEditor))
+ {
+ ce.font = { codeFont.faceName, codeFont.size, codeFont.bold, codeFont.italic };
+ ce.editBox.font = ce.font;
+ ce.OnPostCreate();
+ }
+ }
+
+ threadsView.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ callStackView.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ outputView.buildBox.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ outputView.debugBox.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ outputView.findBox.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ #ifdef GDB_DEBUG_OUTPUT
+ outputView.gdbBox.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ #endif
+#ifdef GDB_DEBUG_GUI
+ if(gdbDialog)
+ {
+ gdbDialog.tree.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ gdbDialog.output.font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
+ }
+#endif
+ }
+
+ void ApplyColorScheme(IDEColorScheme cs)
+ {
+ CodeEditor ce;
+
+ colorScheme = cs;
+
+ for(ce = (CodeEditor)firstChild; ce; ce = (CodeEditor)ce.next)
+ if(ce._class == class(CodeEditor))
+ {
+ EditBox eb = ce.editBox;
+ ce.background = cs.marginColor;
+ eb.selectionColor = cs.selectionColor;
+ eb.selectionText = cs.selectionText;
+ eb.background = cs.codeEditorBG;
+ eb.foreground = cs.codeEditorFG;
+ eb.syntaxColorScheme = cs.syntaxColors;
+ }
+
+ if(projectView)
+ {
+ projectView.fileList.background = cs.projectViewBackground;
+ projectView.fileList.foreground = cs.projectViewText;
+ projectView.fileList.selectionColor = cs.selectionColor;
+ projectView.fileList.selectionText = cs.selectionText;
+ }
+
+ sheet.properties.background = cs.viewsBackground;
+ sheet.properties.foreground = cs.viewsText;
+ sheet.properties.selectionText = cs.sheetSelectionText;
+ sheet.properties.selectionColor = cs.sheetSelectionColor;
+ sheet.methods.background = cs.viewsBackground;
+ sheet.methods.foreground = cs.viewsText;
+
+ threadsView.editBox.background = cs.viewsBackground;
+ threadsView.editBox.foreground = cs.viewsText;
+ threadsView.editBox.selectionColor = cs.selectionColor;
+ threadsView.editBox.selectionText = cs.selectionText;
+
+ callStackView.editBox.background = cs.viewsBackground;
+ callStackView.editBox.foreground = cs.viewsText;
+ callStackView.editBox.selectionColor = cs.selectionColor;
+ callStackView.editBox.selectionText = cs.selectionText;
+
+ watchesView.listBox.background = cs.viewsBackground;
+ watchesView.listBox.foreground = cs.viewsText;
+ watchesView.listBox.selectionColor = cs.selectionColor;
+ watchesView.listBox.selectionText = cs.selectionText;
+
+ breakpointsView.listBox.background = cs.viewsBackground;
+ breakpointsView.listBox.foreground = cs.viewsText;
+ breakpointsView.listBox.selectionColor = cs.selectionColor;
+ breakpointsView.listBox.selectionText = cs.selectionText;
+
+ outputView.buildBox.background = cs.outputBackground;
+ outputView.buildBox.foreground = cs.outputText;
+ outputView.buildBox.selectionColor = cs.selectionColor;
+ outputView.buildBox.selectionText = cs.selectionText;
+
+ outputView.debugBox.background = cs.outputBackground;
+ outputView.debugBox.foreground = cs.outputText;
+ outputView.debugBox.selectionColor = cs.selectionColor;
+ outputView.debugBox.selectionText = cs.selectionText;
+
+ outputView.findBox.background = cs.outputBackground;
+ outputView.findBox.foreground = cs.outputText;
+ outputView.findBox.selectionColor = cs.selectionColor;
+ outputView.findBox.selectionText = cs.selectionText;
+ }
+
ProjectView projectView;
OutputView outputView
void OnGotoError(const char * line, bool noParsing)
{
- CompilerConfig compiler = ide.workspace ? ideSettings.GetCompilerConfig(ide.workspace.compiler) : null;
+ CompilerConfig compiler = ide.workspace ? ideConfig.compilers.GetCompilerConfig(ide.workspace.activeCompiler) : null;
const char * objectFileExt = compiler ? compiler.objectFileExt : objectDefaultFileExt;
ide.GoToError(line, noParsing, objectFileExt);
+ delete compiler;
}
void OnCodeLocationParseAndGoTo(const char * line)
{
- CompilerConfig compiler = ide.workspace ? ideSettings.GetCompilerConfig(ide.workspace.compiler) : null;
+ CompilerConfig compiler = ide.workspace ? ideConfig.compilers.GetCompilerConfig(ide.workspace.activeCompiler) : null;
const char * objectFileExt = compiler ? compiler.objectFileExt : objectDefaultFileExt;
ide.CodeLocationParseAndGoTo(line, ide.findInFilesDialog.findProject, ide.findInFilesDialog.findDir, objectFileExt);
+ delete compiler;
}
bool OnKeyDown(Key key, unichar ch)
CallStackView callStackView
{
- parent = this, font = { panelFont.faceName, panelFont.size };
+ parent = this, font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
void OnSelectFrame(int frameIndex)
{
WatchesView watchesView { parent = this };
ThreadsView threadsView
{
- parent = this, font = { panelFont.faceName, panelFont.size };
+ parent = this, font = { panelFont.faceName, panelFont.size, panelFont.bold, panelFont.italic };
bool OnKeyDown(Key key, unichar ch)
{
fileMenu, $"Global Settings...", g;
bool NotifySelect(MenuItem selection, Modifiers mods)
{
+ // Reload configs here until we setup a configs directory monitor
+ ideConfig.compilers.read(settingsContainer);
+
globalSettingsDialog.master = this;
- if(ide.workspace && ide.workspace.compiler)
- globalSettingsDialog.workspaceActiveCompiler = ide.workspace.compiler;
+ if(ide.workspace && ide.workspace.activeCompiler)
+ globalSettingsDialog.workspaceActiveCompiler = ide.workspace.activeCompiler;
else if(ideSettings.defaultCompiler)
globalSettingsDialog.workspaceActiveCompiler = ideSettings.defaultCompiler;
globalSettingsDialog.Modal();
}
};
MenuDivider { fileMenu };
- Menu recentFiles { fileMenu, $"Recent Files", r };
- Menu recentProjects { fileMenu, $"Recent Projects", p };
+ Menu recentFilesMenu { fileMenu, $"Recent Files", r };
+ Menu recentProjectsMenu { fileMenu, $"Recent Projects", p };
MenuDivider { fileMenu };
MenuItem exitItem
{
bool FileRecentFile(MenuItem selection, Modifiers mods)
{
int id = 0;
- for(file : ideSettings.recentFiles)
+ RecentPaths recentFiles = workspace ? workspace.recentFiles : ideConfig.recentFiles;
+ for(file : recentFiles)
{
if(id == selection.id)
{
char extension[MAX_EXTENSION] = "";
GetExtension(file, extension);
isProjectFile = (!strcmpi(extension, "epj") || !strcmpi(extension, "ews"));
- if(mods.ctrl)
+ if(mods.ctrl && !mods.shift)
{
- char * command = PrintString("ide ", isProjectFile ? "-t " : "", file);
+ char * command = PrintString("ecere-ide ", isProjectFile ? "-t " : "", file);
Execute(command);
delete command;
}
bool FileRecentProject(MenuItem selection, Modifiers mods)
{
int id = 0;
- for(file : ideSettings.recentProjects)
+ for(file : ideConfig.recentWorkspaces)
{
if(id == selection.id)
{
- if(mods.ctrl)
+ if(mods.ctrl && !mods.shift)
{
- char * command = PrintString("ide ", file);
+ char * command = PrintString("ecere-ide ", file);
Execute(command);
delete command;
}
else
- OpenFile(file, false, true, null, no, normal, mods.ctrl && mods.shift);
+ OpenFile(file, false, true, (mods.ctrl && mods.shift) ? "txt" : null, no, normal, mods.ctrl && mods.shift);
break;
}
id++;
newProjectDialog.CreateNewProject();
if(projectView)
{
- ideSettings.AddRecentProject(projectView.fileName);
- ide.UpdateRecentMenus();
- settingsContainer.Save();
+ ideConfig.recentWorkspaces.addRecent(projectView.fileName);
+ ideConfig.recentWorkspaces.write(settingsContainer);
+ ide.updateRecentProjectsMenu();
}
}
}
ideMainFrame.SetText("%s - %s", project.topNode.name, titleECEREIDE);
AdjustMenus();
+ updateRecentMenus();
ide.breakpointsView.LoadFromWorkspace();
ide.watchesView.LoadFromWorkspace();
outputView.visible = false;
ideMainFrame.text = titleECEREIDE;
ide.AdjustMenus();
+ ide.updateRecentMenus();
return true;
}
return false;
void DocumentSaved(Window document, const char * fileName)
{
- ideSettings.AddRecentFile(fileName);
- ide.UpdateRecentMenus();
+ ideConfig.recentFiles.addRecent(fileName);
+ ideConfig.recentFiles.write(settingsContainer);
+ ide.updateRecentFilesMenu();
ide.AdjustFileMenus();
- settingsContainer.Save();
}
bool Window::OnFileModified(FileChange fileChange, const char * param)
char temp[4096];
sprintf(temp, $"The document %s was modified by another application.\n"
"Would you like to reload it and lose your changes?", this.fileName);
- if(MessageBox { type = yesNo, master = this/*.parent*/,
+ if(MessageBox { creationActivation = flash, type = yesNo, master = this/*.parent*/,
text = $"Document has been modified", contents = temp }.Modal() == yes)
{
bool noParsing = (this._class == class(CodeEditor) && ((CodeEditor)this).noParsing) ? true : false;
{
if(workspace)
{
- CompilerConfig compiler = ideSettings.GetCompilerConfig(workspace.compiler);
+ CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(workspace.activeCompiler);
for(prj : workspace.projects)
projectView.ProjectUpdateMakefileForAllConfigs(prj);
delete compiler;
if(workspace)
{
bool silent = mute || (ide.projectView.buildInProgress == none ? false : true);
- CompilerConfig compiler = ideSettings.GetCompilerConfig(workspace.compiler);
+ CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(workspace.activeCompiler);
if(!silent)
{
projectView.ShowOutputBuildLog(true);
void UpdateToolBarActiveCompilers()
{
toolBar.activeCompiler.Clear();
- for(compiler : ideSettings.compilerConfigs)
+ for(compiler : ideConfig.compilers)
{
DataRow row = toolBar.activeCompiler.AddString(compiler.name);
- if(workspace && workspace.compiler && !strcmp(compiler.name, workspace.compiler))
+ if(workspace && workspace.activeCompiler && !strcmp(compiler.name, workspace.activeCompiler))
toolBar.activeCompiler.currentRow = row;
}
if(!toolBar.activeCompiler.currentRow && toolBar.activeCompiler.firstRow)
{
bool unavailable = project && projectView.buildInProgress;
bool naForRun = unavailable || !project || project.GetTargetType(project.config) != executable;
+ BuildOutputMode mode = ide.rightClickMenuBuildOutputMode;
projectNewItem.disabled = unavailable;
toolBar.buttonNewProject.disabled = unavailable;
toolBar.buttonRun.disabled = naForRun;
projectBuildItem.disabled = false;
- projectBuildItem.text = unavailable ? $"Stop Build" : $"Build";
+ projectBuildItem.text = unavailable ? $"Stop Build" : bldMnuStrBuild[mode];
projectBuildItem.accelerator = unavailable ? Key { pauseBreak, ctrl = true } : f7;
projectLinkItem.disabled = unavailable;
if(projectView && projectView.popupMenu && projectView.popupMenu.menu && projectView.popupMenu.created)
{
MenuItem menu;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectBuild, 0);
+ BuildOutputMode mode = ide.rightClickMenuBuildOutputMode;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectBuild, mode);
if(menu)
{
menu.disabled = false;
- menu.text = unavailable ? $"Stop Build" : $"Build";
+ menu.text = unavailable ? $"Stop Build" : bldMnuStrBuild[mode];
menu.accelerator = unavailable ? Key { pauseBreak, ctrl = true } : f7;
}
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectLink, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRebuild, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectCleanTarget, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectClean, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRealClean, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRegenerate, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectInstall, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRemove, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::FileClean, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::FileCompile, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::FileDebugPrecompile, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::FileDebugCompile, 0); if(menu) menu.disabled = unavailable;
- menu = projectView.popupMenu.menu.FindItem(ProjectView::FileDebugGenerateSymbols, 0); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectLink, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRebuild, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectCleanTarget, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectClean, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRealClean, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRegenerate, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectInstall, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::ProjectRemove, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::FileClean, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::FileCompile, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::FileDebugPrecompile, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::FileDebugCompile, mode); if(menu) menu.disabled = unavailable;
+ menu = projectView.popupMenu.menu.FindItem(ProjectView::FileDebugGenerateSymbols, mode); if(menu) menu.disabled = unavailable;
projectView.popupMenu.Update(null);
}
}
ide.projectView.ShowOutputBuildLog(true);
{
- CompilerConfig compiler = ideSettings.GetCompilerConfig(ide.workspace.compiler);
+ CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(ide.workspace.activeCompiler);
ide.projectView.DisplayCompiler(compiler, false);
delete compiler;
}
// this crashes on starting ide with epj file, solution please?
// app.UpdateDisplay();
+ workspace.OpenPreviouslyOpenedFiles(noParsing);
workspace.holdTracking = true;
- for(ofi : workspace.openedFiles)
- {
- if(ofi.state != closed)
- {
- Window file = OpenFile(ofi.path, false, true, null, no, normal, noParsing);
- if(file)
- {
- char fileName[MAX_LOCATION];
- ProjectNode node;
- GetLastDirectory(ofi.path, fileName);
- node = projectView.project.topNode.Find(fileName, true);
- if(node)
- node.EnsureVisible();
- }
- }
- }
ide.RepositionWindows(false);
workspace.holdTracking = false;
if(prj)
{
const char * activeConfigName = null;
- CompilerConfig compiler = ideSettings.GetCompilerConfig(workspace.compiler);
+ CompilerConfig compiler = ideConfig.compilers.GetCompilerConfig(workspace.activeCompiler);
prj.StartMonitoring();
- workspace.projects.Add(prj);
+ workspace.AddProject(prj, null);
if(toolBar.activeConfig.currentRow && toolBar.activeConfig.currentRow != toolBar.activeConfig.firstRow &&
toolBar.activeConfig.currentRow.string && toolBar.activeConfig.currentRow.string[0])
activeConfigName = toolBar.activeConfig.currentRow.string;
{
document.fileName = filePath;
if(workspace && !workspace.holdTracking)
- workspace.UpdateOpenedFileInfo(filePath, opened);
+ workspace.UpdateOpenedFileInfo(filePath, opened, true);
}
}
if(document)
{
if(projectView && document._class == class(CodeEditor) && workspace)
- {
- int lineNumber, position;
- Point scroll;
- CodeEditor editor = (CodeEditor)document;
- editor.openedFileInfo = workspace.UpdateOpenedFileInfo(filePath, opened);
- editor.openedFileInfo.holdTracking = true;
- lineNumber = Max(editor.openedFileInfo.lineNumber - 1, 0);
- position = Max(editor.openedFileInfo.position - 1, 0);
- if(editor.editBox.GoToLineNum(lineNumber))
- editor.editBox.GoToPosition(editor.editBox.line, lineNumber, position);
- scroll.x = Max(editor.openedFileInfo.scroll.x, 0);
- scroll.y = Max(editor.openedFileInfo.scroll.y, 0);
- editor.editBox.scroll = scroll;
- editor.openedFileInfo.holdTracking = false;
- }
+ workspace.RestorePreviouslyOpenedFileState((CodeEditor)document);
if(needFileModified)
document.OnFileModified = OnFileModified;
document.state = maximized;
if(isProject)
- ideSettings.AddRecentProject(document.fileName);
+ {
+ ideConfig.recentWorkspaces.addRecent(document.fileName);
+ ideConfig.recentWorkspaces.write(settingsContainer);
+ ide.updateRecentProjectsMenu();
+ }
+ else if(workspace)
+ workspace.recentFiles.addRecent(document.fileName);
else
- ideSettings.AddRecentFile(document.fileName);
- ide.UpdateRecentMenus();
+ {
+ ideConfig.recentFiles.addRecent(document.fileName);
+ ideConfig.recentFiles.write(settingsContainer);
+ }
+ ide.updateRecentFilesMenu();
ide.AdjustFileMenus();
- settingsContainer.Save();
-
return document;
}
else
/*bool Window::GenericDocumentOnClose(bool parentClosing)
{
if(!parentClosing && ide.workspace)
- ide.workspace.UpdateOpenedFileInfo(fileName, unknown);
+ ide.workspace.UpdateOpenedFileInfo(fileName, unknown, false);
return true;
}*/
bool ModelView::ModelViewOnClose(bool parentClosing)
{
if(!parentClosing && ide.workspace)
- ide.workspace.UpdateOpenedFileInfo(fileName, unknown);
+ ide.workspace.UpdateOpenedFileInfo(fileName, unknown, false);
return true;
}
bool PictureEdit::PictureEditOnClose(bool parentClosing)
{
if(!parentClosing && ide.workspace)
- ide.workspace.UpdateOpenedFileInfo(fileName, unknown);
+ ide.workspace.UpdateOpenedFileInfo(fileName, unknown, false);
return true;
}
//line = atoi(colon+1);
}
// support for "Found n match(es) in "file/path";
- else if(path[len-1] == '\"' && strstr(path, $"Found %d match%s in \"%s\"%s\n\n"."Found") && strstr(path, $"match") && strstr(path, $"in") && (s = strstr(path, "\"")) && s != path+len-1)
+ else if(len > 0 && path[len-1] == '\"' && strstr(path, $"Found %d match%s in \"%s\"%s\n\n"."Found") && strstr(path, $"match") && strstr(path, $"in") && (s = strstr(path, "\"")) && s != path+len-1)
{
path = s+1;
}
{
List<ProjectNode> nodes { };
nodes.Add(node);
- projectView.Compile(node.project, nodes, false, false, isCObject ? cObject : normal);
+ projectView.Compile(node.project, nodes, normal, isCObject ? cObject : normal);
delete nodes;
}
}
newProjectDialog.Modal();
if(projectView)
{
- ideSettings.AddRecentProject(projectView.fileName);
- ide.UpdateRecentMenus();
- settingsContainer.Save();
+ ideConfig.recentWorkspaces.addRecent(projectView.fileName);
+ ideConfig.recentWorkspaces.write(settingsContainer);
+ ide.updateRecentMenus();
}
delete newProjectDialog;
// Open only one project
return true;
}
- void UpdateRecentMenus()
+ void updateRecentMenus()
{
- int c;
- Menu fileMenu = menu.FindMenu($"File");
- Menu recentFiles = fileMenu.FindMenu($"Recent Files");
- Menu recentProjects = fileMenu.FindMenu($"Recent Projects");
+ updateRecentFilesMenu();
+ updateRecentProjectsMenu();
+ }
+
+ void updateRecentFilesMenu()
+ {
+ int c = 0;
char * itemPath = new char[MAX_LOCATION];
char * itemName = new char[MAX_LOCATION+4];
-
- recentFiles.Clear();
- c = 0;
-
- for(recent : ideSettings.recentFiles)
+ Workspace ws = workspace;
+ RecentPaths recentFiles = ws ? ws.recentFiles : ideConfig.recentFiles;
+ recentFilesMenu.Clear();
+ for(recent : recentFiles)
{
strncpy(itemPath, recent, MAX_LOCATION); itemPath[MAX_LOCATION-1] = '\0';
MakeSystemPath(itemPath);
snprintf(itemName, MAX_LOCATION+4, "%d %s", 1 + c, itemPath); itemName[MAX_LOCATION+4-1] = '\0';
- recentFiles.AddDynamic(MenuItem { copyText = true, text = itemName, (Key)k1 + c, id = c, NotifySelect = ide.FileRecentFile }, ide, true);
+ recentFilesMenu.AddDynamic(MenuItem { copyText = true, text = itemName, (Key)k1 + c, id = c, NotifySelect = ide.FileRecentFile }, ide, true);
c++;
}
+ delete itemPath;
+ delete itemName;
+ }
- recentProjects.Clear();
- c = 0;
- for(recent : ideSettings.recentProjects)
+ void updateRecentProjectsMenu()
+ {
+ int c = 0;
+ char * itemPath = new char[MAX_LOCATION];
+ char * itemName = new char[MAX_LOCATION+4];
+ recentProjectsMenu.Clear();
+ for(recent : ideConfig.recentWorkspaces)
{
strncpy(itemPath, recent, MAX_LOCATION); itemPath[MAX_LOCATION-1] = '\0';
MakeSystemPath(itemPath);
snprintf(itemName, MAX_LOCATION+4, "%d %s", 1 + c, itemPath); itemName[MAX_LOCATION+4-1] = '\0';
- recentProjects.AddDynamic(MenuItem { copyText = true, text = itemName, (Key)k1 + c, id = c, NotifySelect = ide.FileRecentProject }, ide, true);
+ recentProjectsMenu.AddDynamic(MenuItem { copyText = true, text = itemName, (Key)k1 + c, id = c, NotifySelect = ide.FileRecentProject }, ide, true);
c++;
}
-
delete itemPath;
delete itemName;
}
}
}
+ ide.ApplyFont(ideSettings.codeEditorFont, ideSettings.codeEditorFontSize);
+ ide.ApplyColorScheme(colorScheme);
+
+ ideConfig.compilers.read(settingsContainer);
+ ideConfig.recentFiles.read(settingsContainer);
+ ideConfig.recentWorkspaces.read(settingsContainer);
+
// First count files arg to decide whether to maximize
{
bool passThrough = false, debugWorkDir = false;