#ifdef ECERE_STATIC import static "ecere" #else import "ecere" #endif define MaxRecent = 9; enum DirTypes { includes, libraries, executables }; char * settingsDirectoryNames[DirTypes] = { "Include Files", "Library Files", "Executable Files" }; class GlobalSettings : GlobalAppSettings { settingsName = "ecereIDE"; Window owner; List systemDirs[DirTypes]; List recentFiles; List recentProjects; virtual void Window::UpdateRecentMenus(); ~GlobalSettings() { DirTypes c; for(c = 0; c < DirTypes::enumSize; c++) systemDirs[c].Free(Link::Free); recentFiles.Free(Link::Free); recentProjects.Free(Link::Free); } void OnAskReloadSettings() { /*if(MessageBox { type = YesNo, master = this, text = "Global Settings Modified Externally", contents = "The global settings were modified by another instance.\n" "Would you like to reload them?" }.Modal() == Yes)*/ { Load(); } } void Load() { if(GlobalAppSettings::Load()) { DirTypes c; // Load new settings for(c = 0; c < DirTypes::enumSize; c++) { systemDirs[c].Free(Link::Free); GetGlobalValue("Directories", settingsDirectoryNames[c], stringList, &systemDirs[c]); } recentFiles.Free(Link::Free); GetGlobalValue("Recent", "Files", stringList, &recentFiles); recentProjects.Free(Link::Free); GetGlobalValue("Recent", "Projects", stringList, &recentProjects); CloseAndMonitor(); UpdateRecentMenus(owner); } } void Save() { if(GlobalAppSettings::Save()) { DirTypes c; for(c = 0; c < DirTypes::enumSize; c++) PutGlobalValue("Directories", settingsDirectoryNames[c], stringList, &systemDirs[c]); PutGlobalValue("Recent", "Files", stringList, &recentFiles); PutGlobalValue("Recent", "Projects", stringList, &recentProjects); CloseAndMonitor(); } } void AddRecentFile(char * fileName) { NamedItem recent, next; for(recent = recentFiles.first; recent; recent = next) { next = recent.next; if(recent.name && !strcmp(recent.name, fileName)) { delete recent.name; recentFiles.Delete(recent); } } while(recentFiles.count >= MaxRecent) { recent = recentFiles.last; if(recent.name) delete recent.name; recentFiles.Delete(recent); } recent = { name = CopyString(fileName) }; recentFiles.Insert(null, recent); UpdateRecentMenus(owner); } void AddRecentProject(char * projectName) { NamedItem recent, next; for(recent = recentProjects.first; recent; recent = next) { next = recent.next; if(recent.name && !strcmp(recent.name, projectName)) { delete recent.name; recentProjects.Delete(recent); } } while(recentProjects.count >= MaxRecent) { recent = recentProjects.last; if(recent.name) delete recent.name; recentProjects.Delete(recent); } recent = { name = CopyString(projectName) }; recentProjects.Insert(null, recent); UpdateRecentMenus(owner); } }