From cb69f21c5c92f450acf22ed2a6d7ef6b837477ae Mon Sep 17 00:00:00 2001 From: Rolando Islas Date: Thu, 22 Sep 2016 22:02:46 -0700 Subject: [PATCH] Allow multiple instances of Light Host - Requires argument `-multi-instance=profileName` where profileName should be changed for each instance --- Source/HostStartup.cpp | 46 ++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/Source/HostStartup.cpp b/Source/HostStartup.cpp index b86a476..b1ba629 100644 --- a/Source/HostStartup.cpp +++ b/Source/HostStartup.cpp @@ -7,6 +7,7 @@ class PluginHostApp : public JUCEApplication { + public: PluginHostApp() {} @@ -17,6 +18,8 @@ public: options.filenameSuffix = "settings"; options.osxLibrarySubFolder = "Preferences"; + checkArguments(&options); + appProperties = new ApplicationProperties(); appProperties->setStorageParameters (options); @@ -26,16 +29,6 @@ public: #if JUCE_MAC Process::setDockIconVisible(false); #endif - - File fileToOpen; - - for (int i = 0; i < getCommandLineParameterArray().size(); ++i) - { - fileToOpen = File::getCurrentWorkingDirectory().getChildFile (getCommandLineParameterArray()[i]); - - if (fileToOpen.existsAsFile()) - break; - } } void shutdown() override @@ -52,15 +45,42 @@ public: const String getApplicationName() override { return "Light Host"; } const String getApplicationVersion() override { return ProjectInfo::versionString; } - bool moreThanOneInstanceAllowed() override { return false; } + bool moreThanOneInstanceAllowed() override { + StringArray multiInstance = getParameter("-multi-instance"); + return multiInstance.size() == 2; + } ApplicationCommandManager commandManager; ScopedPointer appProperties; LookAndFeel_V3 lookAndFeel; private: - ScopedPointer mainWindow; -}; + ScopedPointer mainWindow; + + StringArray getParameter(String lookFor) { + StringArray parameters = getCommandLineParameterArray(); + StringArray found; + for (int i = 0; i < parameters.size(); ++i) + { + String param = parameters[i]; + if (param.contains(lookFor)) + { + found.add(lookFor); + int delimiter = param.indexOf(0, "=") + 1; + String val = param.substring(delimiter); + found.add(val); + return found; + } + } + return found; + } + + void checkArguments(PropertiesFile::Options *options) { + StringArray multiInstance = getParameter("-multi-instance"); + if (multiInstance.size() == 2) + options->filenameSuffix = multiInstance[1] + "." + options->filenameSuffix; + } +}; static PluginHostApp& getApp() { return *dynamic_cast(JUCEApplication::getInstance()); } ApplicationCommandManager& getCommandManager() { return getApp().commandManager; }