diff --git a/extras/Introjucer/Source/Application/jucer_MainWindow.cpp b/extras/Introjucer/Source/Application/jucer_MainWindow.cpp index 8c7ecde7b7..d39e5fa811 100644 --- a/extras/Introjucer/Source/Application/jucer_MainWindow.cpp +++ b/extras/Introjucer/Source/Application/jucer_MainWindow.cpp @@ -191,10 +191,16 @@ bool MainWindow::openFile (const File& file) { ScopedPointer newDoc (new Project (file)); - if (newDoc->loadFrom (file, true) - && closeCurrentProject()) + Result result (newDoc->loadFrom (file, true)); + + if (result.wasOk() && closeCurrentProject()) { - setProject (newDoc.release()); + setProject (newDoc); + newDoc.release()->setChangedFlag (false); + + jassert (getProjectContentComponent() != nullptr); + getProjectContentComponent()->reloadLastOpenDocuments(); + return true; } } @@ -384,8 +390,7 @@ void MainWindowList::closeWindow (MainWindow* w) void MainWindowList::openDocument (OpenDocumentManager::Document* doc, bool grabFocus) { - MainWindow* w = getOrCreateFrontmostWindow(); - w->getProjectContentComponent()->showDocument (doc, grabFocus); + getOrCreateFrontmostWindow()->getProjectContentComponent()->showDocument (doc, grabFocus); } bool MainWindowList::openFile (const File& file) @@ -403,30 +408,18 @@ bool MainWindowList::openFile (const File& file) if (file.hasFileExtension (Project::projectFileExtension)) { - ScopedPointer newDoc (new Project (file)); + MainWindow* const w = getOrCreateEmptyWindow(); + bool ok = w->openFile (file); - if (newDoc->loadFrom (file, true)) - { - MainWindow* const w = getOrCreateEmptyWindow(); - w->setProject (newDoc); + w->makeVisible(); + avoidSuperimposedWindows (w); - newDoc.release()->setChangedFlag (false); - - w->makeVisible(); - avoidSuperimposedWindows (w); - - jassert (w->getProjectContentComponent() != nullptr); - w->getProjectContentComponent()->reloadLastOpenDocuments(); - - return true; - } - } - else if (file.exists()) - { - MainWindow* const w = getOrCreateFrontmostWindow(); - return w->openFile (file); + return ok; } + if (file.exists()) + return getOrCreateFrontmostWindow()->openFile (file); + return false; } diff --git a/extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h b/extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h index 6140acb401..dc633b3060 100644 --- a/extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h +++ b/extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h @@ -40,12 +40,7 @@ public: bool isMissing() override { return hasMissingDependencies(); } Icon getIcon() const override { return Icon (getIcons().jigsaw, getContrastingColour (Colours::red, 0.5f)); } void showDocument() override { showSettingsPage (new ModuleSettingsPanel (project, moduleID)); } - - void deleteItem() override - { - // NB: this local string copy essential, as this object will be deleted during the call - project.getModules().removeModule (String (moduleID)); - } + void deleteItem() override { project.getModules().removeModule (moduleID); } void showPopupMenu() override { @@ -57,7 +52,7 @@ public: void handlePopupMenuResult (int resultCode) override { if (resultCode == 1) - project.getModules().removeModule (moduleID); + deleteItem(); } Project& project; diff --git a/extras/Introjucer/Source/Project/jucer_Module.cpp b/extras/Introjucer/Source/Project/jucer_Module.cpp index f3bf36c95d..139d9c2c58 100644 --- a/extras/Introjucer/Source/Project/jucer_Module.cpp +++ b/extras/Introjucer/Source/Project/jucer_Module.cpp @@ -705,16 +705,16 @@ void EnabledModuleList::addModule (const File& moduleManifestFile, bool copyLoca shouldShowAllModuleFilesInProject (moduleID) = true; shouldCopyModuleFilesLocally (moduleID) = copyLocally; - String path (FileHelpers::getRelativePathFrom (moduleManifestFile.getParentDirectory().getParentDirectory(), - project.getProjectFolder())); + RelativePath path (moduleManifestFile.getParentDirectory().getParentDirectory(), + project.getProjectFolder(), RelativePath::projectFolder); for (Project::ExporterIterator exporter (project); exporter.next();) - exporter->getPathForModuleValue (moduleID) = path; + exporter->getPathForModuleValue (moduleID) = path.toUnixStyle(); } } } -void EnabledModuleList::removeModule (const String& moduleID) +void EnabledModuleList::removeModule (String moduleID) // must be pass-by-value, and not a const ref! { for (int i = state.getNumChildren(); --i >= 0;) if (state.getChild(i) [Ids::ID] == moduleID) diff --git a/extras/Introjucer/Source/Project/jucer_Module.h b/extras/Introjucer/Source/Project/jucer_Module.h index 7f1c1e2db7..be767b7823 100644 --- a/extras/Introjucer/Source/Project/jucer_Module.h +++ b/extras/Introjucer/Source/Project/jucer_Module.h @@ -123,7 +123,7 @@ public: bool isModuleEnabled (const String& moduleID) const; Value shouldShowAllModuleFilesInProject (const String& moduleID); Value shouldCopyModuleFilesLocally (const String& moduleID) const; - void removeModule (const String& moduleID); + void removeModule (String moduleID); bool isAudioPluginModuleMissing() const; ModuleDescription getModuleInfo (const String& moduleID);