bool PolycodeIDEApp::quitApp() { quittingApp = true; while(editorManager->getCurrentEditor()) { PolycodeEditor *editor = editorManager->getCurrentEditor(); if(editor->hasChanges()) { OSFileEntry entry(editor->getFilePath(), OSFileEntry::TYPE_FILE); frame->yesNoCancelPopup->setCaption("The file \""+entry.name+"\" has unsaved changes. Save before quitting?"); frame->yesNoCancelPopup->action = "closeQuitFile"; frame->showModal(frame->yesNoCancelPopup); return false; } else { if(editor->getEditorHolder()) { editor->getEditorHolder()->setEditor(NULL); } editorManager->destroyEditor(editor); if(editorManager->openEditors.size() > 0) { editorManager->setCurrentEditor(editorManager->openEditors[0]); frame->getActiveProjectFrame()->getActiveTab()->showEditor(editorManager->openEditors[0]); } else{ editorManager->setCurrentEditor(NULL); } } } return true; }
bool PolycodeEditorManager::hasUnsavedFiles() { for(int i=0; i < openEditors.size();i++) { PolycodeEditor *editor = openEditors[i]; if(editor->hasChanges()) return true; } return false; }
bool PolycodeEditorManager::hasUnsavedFilesForProject(PolycodeProject *project) { for(int i=0; i < openEditors.size();i++) { PolycodeEditor *editor = openEditors[i]; if(editor->hasChanges() && editor->parentProject == project) return true; } return false; }
void PolycodeIDEApp::closeProject() { if(projectManager->getActiveProject()) { std::vector<PolycodeEditor*> editors; PolycodeEditor *editor; bool hasChanges = false; for (int i=0; i < editorManager->openEditors.size(); i++) { editor = editorManager->openEditors[i]; if (editor->hasChanges()) hasChanges = true; if (editor->parentProject == projectManager->getActiveProject()) editors.push_back(editor); } tempEditorStore = editors; // current project files if (hasChanges) { String name = projectManager->getActiveProject()->getProjectName(); frame->yesNoCancelPopup->setCaption("Project '" + name + "' has unsaved changes. Save all?"); frame->yesNoCancelPopup->action = "closeProject"; frame->showModal(frame->yesNoCancelPopup); } else doCloseProject(); } else PolycodeConsole::print("There are no active projects to close.\n"); }