Răsfoiți Sursa

IDE will now close files associated with the a project when that project is closed

Ivan Safrin 12 ani în urmă
părinte
comite
9e616d75be

+ 1 - 1
IDE/Contents/Include/PolycodeIDEApp.h

@@ -89,7 +89,7 @@ public:
 	void doRunProject();
 	void exportProject();	
 	
-	void removeEditor(PolycodeEditor *editor);
+	bool removeEditor(PolycodeEditor *editor);
 	
 	// system callbacks
 	

+ 21 - 4
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -228,15 +228,16 @@ void PolycodeIDEApp::refreshProject() {
 	}
 }
 
-void PolycodeIDEApp::removeEditor(PolycodeEditor *editor) {
+bool PolycodeIDEApp::removeEditor(PolycodeEditor *editor) {
 	if(!editor)
-		return;
+		return false;
 		
 	if(editor->hasChanges()) {
 		OSFileEntry entry(editor->getFilePath(), OSFileEntry::TYPE_FILE);	
 		frame->yesNoCancelPopup->setCaption("The file \""+entry.name+"\" has unsaved changes. Save before closing?");
 		frame->yesNoCancelPopup->action = "closeFile";
-		frame->showModal(frame->yesNoCancelPopup);		
+		frame->showModal(frame->yesNoCancelPopup);
+		return true;
 	} else {	
 		frame->removeEditor(editor);
 		editorManager->destroyEditor(editor);
@@ -256,7 +257,23 @@ void PolycodeIDEApp::closeFile() {
 
 void PolycodeIDEApp::closeProject() {
 	if(projectManager->getActiveProject()) {
-		frame->getProjectBrowser()->removeProject(projectManager->getActiveProject());
+		
+		bool hasEditors;		
+		do {
+			hasEditors = false;
+			for(int i=0; i < editorManager->openEditors.size(); i++) {
+				if(editorManager->openEditors[i]->parentProject == projectManager->getActiveProject()) {
+					if(removeEditor(editorManager->openEditors[i])) {
+						
+						return;
+					}
+					hasEditors = true;
+					break;
+				}
+			}
+		} while(hasEditors);
+		
+		frame->getProjectBrowser()->removeProject(projectManager->getActiveProject());		
 		projectManager->removeProject(projectManager->getActiveProject());
 	}
 }