| @@ -25,7 +25,34 @@ | |||||
| #ifndef JUCER_COMMONHEADERS_H_INCLUDED | #ifndef JUCER_COMMONHEADERS_H_INCLUDED | ||||
| #define JUCER_COMMONHEADERS_H_INCLUDED | #define JUCER_COMMONHEADERS_H_INCLUDED | ||||
| //============================================================================== | |||||
| struct TargetOS | |||||
| { | |||||
| enum OS | |||||
| { | |||||
| windows = 0, | |||||
| osx, | |||||
| linux, | |||||
| unknown | |||||
| }; | |||||
| static OS getThisOS() noexcept | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| return windows; | |||||
| #elif JUCE_MAC | |||||
| return osx; | |||||
| #elif JUCE_LINUX | |||||
| return linux; | |||||
| #else | |||||
| return unknown; | |||||
| #endif | |||||
| } | |||||
| }; | |||||
| typedef TargetOS::OS DependencyPathOS; | |||||
| //============================================================================== | |||||
| #include "../Utility/jucer_StoredSettings.h" | #include "../Utility/jucer_StoredSettings.h" | ||||
| #include "../Utility/jucer_Icons.h" | #include "../Utility/jucer_Icons.h" | ||||
| #include "../Utility/jucer_MiscUtilities.h" | #include "../Utility/jucer_MiscUtilities.h" | ||||
| @@ -29,28 +29,22 @@ public: | |||||
| }; | }; | ||||
| //============================================================================== | //============================================================================== | ||||
| namespace PathSettingsHelpers | |||||
| { | |||||
| bool checkSdkPathContainsFile (const String& path, const String& fileToCheckFor) | |||||
| { | |||||
| return File::getCurrentWorkingDirectory().getChildFile( path + "/" + fileToCheckFor).existsAsFile(); | |||||
| } | |||||
| } | |||||
| PathSettingsTab::PathSettingsTab (DependencyPathOS os) | PathSettingsTab::PathSettingsTab (DependencyPathOS os) | ||||
| { | { | ||||
| const int maxChars = 1024; | const int maxChars = 1024; | ||||
| vst2PathComponent = pathComponents.add (new TextPropertyComponent (getPathByKey (DependencyPath::vst2KeyName, os), "VST SDK", maxChars, false)); | |||||
| vst3PathComponent = pathComponents.add (new TextPropertyComponent (getPathByKey (DependencyPath::vst3KeyName, os), "VST3 SDK", maxChars, false)); | |||||
| StoredSettings& settings = getAppSettings(); | |||||
| vst2PathComponent = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::vst2Path, os), "VST SDK", maxChars, false)); | |||||
| vst3PathComponent = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::vst3Path, os), "VST3 SDK", maxChars, false)); | |||||
| #if ! JUCE_LINUX | #if ! JUCE_LINUX | ||||
| rtasPathComponent = pathComponents.add (new TextPropertyComponent (getPathByKey (DependencyPath::rtasKeyName, os), "RTAS SDK", maxChars, false)); | |||||
| aaxPathComponent = pathComponents.add (new TextPropertyComponent (getPathByKey (DependencyPath::aaxKeyName, os), "AAX SDK", maxChars, false)); | |||||
| rtasPathComponent = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::rtasPath, os), "RTAS SDK", maxChars, false)); | |||||
| aaxPathComponent = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::aaxPath, os), "AAX SDK", maxChars, false)); | |||||
| #endif | #endif | ||||
| androidSdkPathComponent = pathComponents.add (new TextPropertyComponent (getPathByKey (DependencyPath::androidSdkKeyName, os), "Android SDK", maxChars, false)); | |||||
| androidNdkPathComponent = pathComponents.add (new TextPropertyComponent (getPathByKey (DependencyPath::androidNdkKeyName, os), "Android NDK", maxChars, false)); | |||||
| androidSdkPathComponent = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::androidSDKPath, os), "Android SDK", maxChars, false)); | |||||
| androidNdkPathComponent = pathComponents.add (new TextPropertyComponent (settings.getGlobalPath (Ids::androidNDKPath, os), "Android NDK", maxChars, false)); | |||||
| for (TextPropertyComponent** component = pathComponents.begin(); component != pathComponents.end(); ++component) | for (TextPropertyComponent** component = pathComponents.begin(); component != pathComponents.end(); ++component) | ||||
| { | { | ||||
| @@ -66,20 +60,23 @@ PathSettingsTab::~PathSettingsTab() | |||||
| void PathSettingsTab::textPropertyComponentChanged (TextPropertyComponent* textPropertyComponent) | void PathSettingsTab::textPropertyComponentChanged (TextPropertyComponent* textPropertyComponent) | ||||
| { | { | ||||
| String keyName = getKeyForPropertyComponent (textPropertyComponent); | |||||
| Identifier keyName = getKeyForPropertyComponent (textPropertyComponent); | |||||
| Colour textColour = getAppSettings().isGlobalPathValid (keyName, textPropertyComponent->getText()) | |||||
| ? Colours::black | |||||
| : Colours::red; | |||||
| Colour textColour = checkPathByKey (keyName, textPropertyComponent->getText()) ? Colours::black : Colours::red; | |||||
| textPropertyComponent->setColour (TextPropertyComponent::textColourId, textColour); | textPropertyComponent->setColour (TextPropertyComponent::textColourId, textColour); | ||||
| } | } | ||||
| String PathSettingsTab::getKeyForPropertyComponent (TextPropertyComponent* component) const | |||||
| Identifier PathSettingsTab::getKeyForPropertyComponent (TextPropertyComponent* component) const | |||||
| { | { | ||||
| if (component == vst2PathComponent) return DependencyPath::vst2KeyName; | |||||
| if (component == vst3PathComponent) return DependencyPath::vst3KeyName; | |||||
| if (component == rtasPathComponent) return DependencyPath::rtasKeyName; | |||||
| if (component == aaxPathComponent) return DependencyPath::aaxKeyName; | |||||
| if (component == androidSdkPathComponent) return DependencyPath::androidSdkKeyName; | |||||
| if (component == androidNdkPathComponent) return DependencyPath::androidNdkKeyName; | |||||
| if (component == vst2PathComponent) return Ids::vst2Path; | |||||
| if (component == vst3PathComponent) return Ids::vst3Path; | |||||
| if (component == rtasPathComponent) return Ids::rtasPath; | |||||
| if (component == aaxPathComponent) return Ids::aaxPath; | |||||
| if (component == androidSdkPathComponent) return Ids::androidSDKPath; | |||||
| if (component == androidNdkPathComponent) return Ids::androidNDKPath; | |||||
| // this property component does not have a key associated to it! | // this property component does not have a key associated to it! | ||||
| jassertfalse; | jassertfalse; | ||||
| @@ -107,104 +104,6 @@ void PathSettingsTab::resized() | |||||
| } | } | ||||
| } | } | ||||
| //============================================================================== | |||||
| Value& PathSettingsTab::getPathByKey (const String& key, DependencyPathOS os) | |||||
| { | |||||
| getAppSettings().pathValues[key].referTo (getAppSettings().projectDefaults.getPropertyAsValue (key, nullptr)); | |||||
| Value& value = getAppSettings().pathValues[key]; | |||||
| if (value.toString().isEmpty()) | |||||
| value = getFallbackPathByKey (key, os); | |||||
| return value; | |||||
| } | |||||
| //============================================================================== | |||||
| String PathSettingsTab::getFallbackPathByKey (const String& key, DependencyPathOS os) | |||||
| { | |||||
| if (key == DependencyPath::vst2KeyName || key == DependencyPath::vst3KeyName) | |||||
| return os == DependencyPath::windows ? "c:\\SDKs\\VST3 SDK" | |||||
| : "~/SDKs/VST3 SDK"; | |||||
| if (key == DependencyPath::rtasKeyName) | |||||
| { | |||||
| if (os == DependencyPath::windows) return "c:\\SDKs\\PT_80_SDK"; | |||||
| if (os == DependencyPath::osx) return "~/SDKs/PT_80_SDK"; | |||||
| // no RTAS on this OS! | |||||
| jassertfalse; | |||||
| return String(); | |||||
| } | |||||
| if (key == DependencyPath::aaxKeyName) | |||||
| { | |||||
| if (os == DependencyPath::windows) return "c:\\SDKs\\AAX"; | |||||
| if (os == DependencyPath::osx) return "~/SDKs/AAX" ; | |||||
| // no RTAS on this OS! | |||||
| jassertfalse; | |||||
| return String(); | |||||
| } | |||||
| if (key == DependencyPath::androidSdkKeyName) | |||||
| return os == DependencyPath::windows ? "c:\\SDKs\\android-sdk" | |||||
| : "~/Library/Android/sdk"; | |||||
| if (key == DependencyPath::androidNdkKeyName) | |||||
| return os == DependencyPath::windows ? "c:\\SDKs\\android-ndk" | |||||
| : "~/Library/Android/ndk"; | |||||
| // didn't recognise the key provided! | |||||
| jassertfalse; | |||||
| return String(); | |||||
| } | |||||
| //============================================================================== | |||||
| bool PathSettingsTab::checkPathByKey (const String& key, const String& path) | |||||
| { | |||||
| String fileToCheckFor; | |||||
| if (key == DependencyPath::vst2KeyName) | |||||
| { | |||||
| fileToCheckFor = "public.sdk/source/vst2.x/audioeffectx.h"; | |||||
| } | |||||
| else if (key == DependencyPath::vst3KeyName) | |||||
| { | |||||
| fileToCheckFor = "base/source/baseiids.cpp"; | |||||
| } | |||||
| else if (key == DependencyPath::rtasKeyName) | |||||
| { | |||||
| fileToCheckFor = "AlturaPorts/TDMPlugIns/PlugInLibrary/EffectClasses/CEffectProcessMIDI.cpp"; | |||||
| } | |||||
| else if (key == DependencyPath::aaxKeyName) | |||||
| { | |||||
| fileToCheckFor = "Interfaces/AAX_Exports.cpp"; | |||||
| } | |||||
| else if (key == DependencyPath::androidSdkKeyName) | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| fileToCheckFor = "platform-tools/adb.exe"; | |||||
| #else | |||||
| fileToCheckFor = "platform-tools/adb"; | |||||
| #endif | |||||
| } | |||||
| else if (key == DependencyPath::androidNdkKeyName) | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| fileToCheckFor = "ndk-depends.exe"; | |||||
| #else | |||||
| fileToCheckFor = "ndk-depends"; | |||||
| #endif | |||||
| } | |||||
| else | |||||
| { | |||||
| // didn't recognise the key provided! | |||||
| jassertfalse; | |||||
| return false; | |||||
| } | |||||
| return PathSettingsHelpers::checkSdkPathContainsFile (path, fileToCheckFor); | |||||
| } | |||||
| //============================================================================== | //============================================================================== | ||||
| struct AppearanceEditor | struct AppearanceEditor | ||||
| @@ -469,7 +368,7 @@ String AppearanceSettingsTab::getName() const noexcept | |||||
| GlobalPreferencesComponent::GlobalPreferencesComponent() | GlobalPreferencesComponent::GlobalPreferencesComponent() | ||||
| : TabbedComponent (TabbedButtonBar::TabsAtTop) | : TabbedComponent (TabbedButtonBar::TabsAtTop) | ||||
| { | { | ||||
| preferenceTabs.add (new PathSettingsTab (DependencyPath::getThisOS())); | |||||
| preferenceTabs.add (new PathSettingsTab (TargetOS::getThisOS())); | |||||
| preferenceTabs.add (new AppearanceSettingsTab); | preferenceTabs.add (new AppearanceSettingsTab); | ||||
| for (GlobalPreferencesTab** tab = preferenceTabs.begin(); tab != preferenceTabs.end(); ++tab) | for (GlobalPreferencesTab** tab = preferenceTabs.begin(); tab != preferenceTabs.end(); ++tab) | ||||
| @@ -43,14 +43,10 @@ public: | |||||
| void resized() override; | void resized() override; | ||||
| static Value& getPathByKey (const String& key, DependencyPathOS); | |||||
| static String getFallbackPathByKey (const String& key, DependencyPathOS); | |||||
| static bool checkPathByKey (const String& key, const String& path); | |||||
| private: | private: | ||||
| void textPropertyComponentChanged (TextPropertyComponent*) override; | void textPropertyComponentChanged (TextPropertyComponent*) override; | ||||
| String getKeyForPropertyComponent (TextPropertyComponent*) const; | |||||
| Identifier getKeyForPropertyComponent (TextPropertyComponent*) const; | |||||
| OwnedArray<TextPropertyComponent> pathComponents; | OwnedArray<TextPropertyComponent> pathComponents; | ||||
| @@ -753,17 +753,13 @@ private: | |||||
| void initialiseDependencyPathValues() | void initialiseDependencyPathValues() | ||||
| { | { | ||||
| sdkPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::androidSDKPath), | |||||
| DependencyPath::androidSdkKeyName, | |||||
| DependencyPath::getThisOS() | |||||
| ))); | |||||
| ndkPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::androidNDKPath), | |||||
| DependencyPath::androidNdkKeyName, | |||||
| DependencyPath::getThisOS() | |||||
| ))); | |||||
| sdkPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::androidSDKPath), | |||||
| Ids::androidSDKPath, | |||||
| TargetOS::getThisOS()))); | |||||
| ndkPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::androidNDKPath), | |||||
| Ids::androidNDKPath, | |||||
| TargetOS::getThisOS()))); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -405,33 +405,16 @@ private: | |||||
| void initialiseDependencyPathValues() | void initialiseDependencyPathValues() | ||||
| { | { | ||||
| DependencyPathOS pathOS = isLinux() ? DependencyPath::linux : DependencyPath::windows; | |||||
| DependencyPathOS pathOS = isLinux() ? TargetOS::linux | |||||
| : TargetOS::windows; | |||||
| vst2Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vstFolder), | |||||
| DependencyPath::vst2KeyName, | |||||
| pathOS | |||||
| ))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vst3Folder), | |||||
| DependencyPath::vst3KeyName, | |||||
| pathOS | |||||
| ))); | |||||
| vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder), Ids::vst2Path, pathOS))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder), Ids::vst3Path, pathOS))); | |||||
| if (! isLinux()) | if (! isLinux()) | ||||
| { | { | ||||
| aaxPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::aaxFolder), | |||||
| DependencyPath::aaxKeyName, | |||||
| pathOS | |||||
| ))); | |||||
| rtasPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::rtasFolder), | |||||
| DependencyPath::rtasKeyName, | |||||
| pathOS | |||||
| ))); | |||||
| aaxPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::aaxFolder), Ids::aaxPath, pathOS))); | |||||
| rtasPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::rtasFolder), Ids::rtasPath, pathOS))); | |||||
| } | } | ||||
| } | } | ||||
| @@ -559,29 +559,21 @@ protected: | |||||
| void initialiseDependencyPathValues() | void initialiseDependencyPathValues() | ||||
| { | { | ||||
| vst2Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vstFolder), | |||||
| DependencyPath::vst2KeyName, | |||||
| DependencyPath::windows | |||||
| ))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vst3Folder), | |||||
| DependencyPath::vst3KeyName, | |||||
| DependencyPath::windows | |||||
| ))); | |||||
| aaxPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::aaxFolder), | |||||
| DependencyPath::aaxKeyName, | |||||
| DependencyPath::windows | |||||
| ))); | |||||
| rtasPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::rtasFolder), | |||||
| DependencyPath::rtasKeyName, | |||||
| DependencyPath::windows | |||||
| ))); | |||||
| vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder), | |||||
| Ids::vst2Path, | |||||
| TargetOS::windows))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder), | |||||
| Ids::vst3Path, | |||||
| TargetOS::windows))); | |||||
| aaxPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::aaxFolder), | |||||
| Ids::aaxPath, | |||||
| TargetOS::windows))); | |||||
| rtasPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::rtasFolder), | |||||
| Ids::rtasPath, | |||||
| TargetOS::windows))); | |||||
| } | } | ||||
| JUCE_DECLARE_NON_COPYABLE (MSVCProjectExporterBase) | JUCE_DECLARE_NON_COPYABLE (MSVCProjectExporterBase) | ||||
| @@ -350,17 +350,13 @@ private: | |||||
| void initialiseDependencyPathValues() | void initialiseDependencyPathValues() | ||||
| { | { | ||||
| vst2Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vstFolder), | |||||
| DependencyPath::vst2KeyName, | |||||
| DependencyPath::linux | |||||
| ))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vst3Folder), | |||||
| DependencyPath::vst3KeyName, | |||||
| DependencyPath::linux | |||||
| ))); | |||||
| vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder), | |||||
| Ids::vst2Path, | |||||
| TargetOS::linux))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder), | |||||
| Ids::vst3Path, | |||||
| TargetOS::linux))); | |||||
| } | } | ||||
| JUCE_DECLARE_NON_COPYABLE (MakefileProjectExporter) | JUCE_DECLARE_NON_COPYABLE (MakefileProjectExporter) | ||||
| @@ -1504,28 +1504,16 @@ private: | |||||
| void initialiseDependencyPathValues() | void initialiseDependencyPathValues() | ||||
| { | { | ||||
| vst2Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vstFolder), | |||||
| DependencyPath::vst2KeyName, | |||||
| DependencyPath::osx | |||||
| ))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::vst3Folder), | |||||
| DependencyPath::vst3KeyName, | |||||
| DependencyPath::osx | |||||
| ))); | |||||
| aaxPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::aaxFolder), | |||||
| DependencyPath::aaxKeyName, | |||||
| DependencyPath::osx | |||||
| ))); | |||||
| rtasPath.referTo (Value (new DependencyPathValueSource ( | |||||
| getSetting (Ids::rtasFolder), | |||||
| DependencyPath::rtasKeyName, | |||||
| DependencyPath::osx | |||||
| ))); | |||||
| vst2Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vstFolder), | |||||
| Ids::vst2Path, TargetOS::osx))); | |||||
| vst3Path.referTo (Value (new DependencyPathValueSource (getSetting (Ids::vst3Folder), | |||||
| Ids::vst3Path, TargetOS::osx))); | |||||
| aaxPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::aaxFolder), | |||||
| Ids::aaxPath, TargetOS::osx))); | |||||
| rtasPath.referTo (Value (new DependencyPathValueSource (getSetting (Ids::rtasFolder), | |||||
| Ids::rtasPath, TargetOS::osx))); | |||||
| } | } | ||||
| }; | }; | ||||
| @@ -12,24 +12,16 @@ | |||||
| #include "jucer_DependencyPathPropertyComponent.h" | #include "jucer_DependencyPathPropertyComponent.h" | ||||
| #include "../Application/jucer_GlobalPreferences.h" | #include "../Application/jucer_GlobalPreferences.h" | ||||
| //============================================================================== | |||||
| const String DependencyPath::vst2KeyName = "vst2Path"; | |||||
| const String DependencyPath::vst3KeyName = "vst3Path"; | |||||
| const String DependencyPath::rtasKeyName = "rtasPath"; | |||||
| const String DependencyPath::aaxKeyName = "aaxPath"; | |||||
| const String DependencyPath::androidSdkKeyName = "androidSdkPath"; | |||||
| const String DependencyPath::androidNdkKeyName = "androidNdkPath"; | |||||
| //============================================================================== | //============================================================================== | ||||
| DependencyPathValueSource::DependencyPathValueSource (const Value& projectSettingsPath, | DependencyPathValueSource::DependencyPathValueSource (const Value& projectSettingsPath, | ||||
| String globalSettingsKey, | |||||
| Identifier globalSettingsKey, | |||||
| DependencyPathOS osThisSettingAppliesTo) | DependencyPathOS osThisSettingAppliesTo) | ||||
| : projectSettingsValue (projectSettingsPath), | : projectSettingsValue (projectSettingsPath), | ||||
| globalKey (globalSettingsKey), | globalKey (globalSettingsKey), | ||||
| os (osThisSettingAppliesTo), | os (osThisSettingAppliesTo), | ||||
| globalSettingsValue (PathSettingsTab::getPathByKey (globalKey, os)), | |||||
| fallbackValue (PathSettingsTab::getFallbackPathByKey (globalKey, os)) | |||||
| globalSettingsValue (getAppSettings().getGlobalPath (globalKey, os)), | |||||
| fallbackValue (getAppSettings().getFallbackPath (globalKey, os)) | |||||
| { | { | ||||
| globalSettingsValue.addListener (this); | globalSettingsValue.addListener (this); | ||||
| } | } | ||||
| @@ -41,7 +33,7 @@ bool DependencyPathValueSource::isValidPath() const | |||||
| if (! appliesToThisOS()) | if (! appliesToThisOS()) | ||||
| return true; | return true; | ||||
| return PathSettingsTab::checkPathByKey (globalKey, getValue().toString()); | |||||
| return getAppSettings().isGlobalPathValid (globalKey, getValue().toString()); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -11,36 +11,6 @@ | |||||
| #ifndef JUCER_DEPENDENCYPATHPROPERTYCOMPONENT_H_INCLUDED | #ifndef JUCER_DEPENDENCYPATHPROPERTYCOMPONENT_H_INCLUDED | ||||
| #define JUCER_DEPENDENCYPATHPROPERTYCOMPONENT_H_INCLUDED | #define JUCER_DEPENDENCYPATHPROPERTYCOMPONENT_H_INCLUDED | ||||
| //============================================================================== | |||||
| class DependencyPath | |||||
| { | |||||
| public: | |||||
| enum OS | |||||
| { | |||||
| windows = 0, | |||||
| osx, | |||||
| linux, | |||||
| unknown | |||||
| }; | |||||
| static OS getThisOS() | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| return DependencyPath::windows; | |||||
| #elif JUCE_MAC | |||||
| return DependencyPath::osx; | |||||
| #elif JUCE_LINUX | |||||
| return DependencyPath::linux; | |||||
| #else | |||||
| return DependencyPath::unknown; | |||||
| #endif | |||||
| } | |||||
| const static String vst2KeyName, vst3KeyName, rtasKeyName, aaxKeyName, | |||||
| androidSdkKeyName, androidNdkKeyName; | |||||
| }; | |||||
| typedef DependencyPath::OS DependencyPathOS; | |||||
| //============================================================================== | //============================================================================== | ||||
| /** This ValueSource type implements the fallback logic required for dependency | /** This ValueSource type implements the fallback logic required for dependency | ||||
| @@ -54,7 +24,7 @@ class DependencyPathValueSource : public Value::ValueSource, | |||||
| { | { | ||||
| public: | public: | ||||
| DependencyPathValueSource (const Value& projectSettingsPath, | DependencyPathValueSource (const Value& projectSettingsPath, | ||||
| String globalSettingsKey, | |||||
| Identifier globalSettingsKey, | |||||
| DependencyPathOS osThisSettingAppliesTo); | DependencyPathOS osThisSettingAppliesTo); | ||||
| /** This gets the currently used value, which may be either | /** This gets the currently used value, which may be either | ||||
| @@ -95,7 +65,7 @@ public: | |||||
| bool appliesToThisOS() const | bool appliesToThisOS() const | ||||
| { | { | ||||
| return os == DependencyPath::getThisOS(); | |||||
| return os == TargetOS::getThisOS(); | |||||
| } | } | ||||
| bool isValidPath() const; | bool isValidPath() const; | ||||
| @@ -124,9 +94,9 @@ private: | |||||
| { | { | ||||
| // only use the global settings if they are set on the same OS | // only use the global settings if they are set on the same OS | ||||
| // that this setting is for! | // that this setting is for! | ||||
| DependencyPathOS thisOS = DependencyPath::getThisOS(); | |||||
| DependencyPathOS thisOS = TargetOS::getThisOS(); | |||||
| return thisOS == DependencyPath::unknown ? false : os == thisOS; | |||||
| return thisOS == TargetOS::unknown ? false : os == thisOS; | |||||
| } | } | ||||
| /** the dependency path setting as set in this Introjucer project. */ | /** the dependency path setting as set in this Introjucer project. */ | ||||
| @@ -134,7 +104,7 @@ private: | |||||
| /** the global key used in the application settings for the global setting value. | /** the global key used in the application settings for the global setting value. | ||||
| needed for checking whether the path is valid. */ | needed for checking whether the path is valid. */ | ||||
| String globalKey; | |||||
| Identifier globalKey; | |||||
| /** on what operating system should this dependency path be used? | /** on what operating system should this dependency path be used? | ||||
| note that this is *not* the os that is targeted by the project, | note that this is *not* the os that is targeted by the project, | ||||
| @@ -55,6 +55,10 @@ namespace Ids | |||||
| DECLARE_ID (vst3Folder); | DECLARE_ID (vst3Folder); | ||||
| DECLARE_ID (rtasFolder); | DECLARE_ID (rtasFolder); | ||||
| DECLARE_ID (auFolder); | DECLARE_ID (auFolder); | ||||
| DECLARE_ID (vst2Path); | |||||
| DECLARE_ID (vst3Path); | |||||
| DECLARE_ID (rtasPath); | |||||
| DECLARE_ID (aaxPath); | |||||
| DECLARE_ID (flags); | DECLARE_ID (flags); | ||||
| DECLARE_ID (line); | DECLARE_ID (line); | ||||
| DECLARE_ID (index); | DECLARE_ID (index); | ||||
| @@ -216,3 +216,104 @@ void StoredSettings::ColourSelectorWithSwatches::setSwatchColour (int index, con | |||||
| { | { | ||||
| getAppSettings().swatchColours.set (index, newColour); | getAppSettings().swatchColours.set (index, newColour); | ||||
| } | } | ||||
| //============================================================================== | |||||
| static bool doesSDKPathContainFile (const String& path, const String& fileToCheckFor) | |||||
| { | |||||
| return File::getCurrentWorkingDirectory().getChildFile( path + "/" + fileToCheckFor).existsAsFile(); | |||||
| } | |||||
| Value StoredSettings::getGlobalPath (const Identifier& key, DependencyPathOS os) | |||||
| { | |||||
| Value v (projectDefaults.getPropertyAsValue (key, nullptr)); | |||||
| if (v.toString().isEmpty()) | |||||
| v = getFallbackPath (key, os); | |||||
| return v; | |||||
| } | |||||
| String StoredSettings::getFallbackPath (const Identifier& key, DependencyPathOS os) | |||||
| { | |||||
| if (key == Ids::vst2Path || key == Ids::vst3Path) | |||||
| return os == TargetOS::windows ? "c:\\SDKs\\VST3 SDK" | |||||
| : "~/SDKs/VST3 SDK"; | |||||
| if (key == Ids::rtasPath) | |||||
| { | |||||
| if (os == TargetOS::windows) return "c:\\SDKs\\PT_80_SDK"; | |||||
| if (os == TargetOS::osx) return "~/SDKs/PT_80_SDK"; | |||||
| // no RTAS on this OS! | |||||
| jassertfalse; | |||||
| return String(); | |||||
| } | |||||
| if (key == Ids::aaxPath) | |||||
| { | |||||
| if (os == TargetOS::windows) return "c:\\SDKs\\AAX"; | |||||
| if (os == TargetOS::osx) return "~/SDKs/AAX" ; | |||||
| // no AAX on this OS! | |||||
| jassertfalse; | |||||
| return String(); | |||||
| } | |||||
| if (key == Ids::androidSDKPath) | |||||
| return os == TargetOS::windows ? "c:\\SDKs\\android-sdk" | |||||
| : "~/Library/Android/sdk"; | |||||
| if (key == Ids::androidNDKPath) | |||||
| return os == TargetOS::windows ? "c:\\SDKs\\android-ndk" | |||||
| : "~/Library/Android/ndk"; | |||||
| // didn't recognise the key provided! | |||||
| jassertfalse; | |||||
| return String(); | |||||
| } | |||||
| bool StoredSettings::isGlobalPathValid (const Identifier& key, const String& path) | |||||
| { | |||||
| String fileToCheckFor; | |||||
| if (key == Ids::vst2Path) | |||||
| { | |||||
| fileToCheckFor = "public.sdk/source/vst2.x/audioeffectx.h"; | |||||
| } | |||||
| else if (key == Ids::vst3Path) | |||||
| { | |||||
| fileToCheckFor = "base/source/baseiids.cpp"; | |||||
| } | |||||
| else if (key == Ids::rtasPath) | |||||
| { | |||||
| fileToCheckFor = "AlturaPorts/TDMPlugIns/PlugInLibrary/EffectClasses/CEffectProcessMIDI.cpp"; | |||||
| } | |||||
| else if (key == Ids::aaxPath) | |||||
| { | |||||
| fileToCheckFor = "Interfaces/AAX_Exports.cpp"; | |||||
| } | |||||
| else if (key == Ids::androidSDKPath) | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| fileToCheckFor = "platform-tools/adb.exe"; | |||||
| #else | |||||
| fileToCheckFor = "platform-tools/adb"; | |||||
| #endif | |||||
| } | |||||
| else if (key == Ids::androidNDKPath) | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| fileToCheckFor = "ndk-depends.exe"; | |||||
| #else | |||||
| fileToCheckFor = "ndk-depends"; | |||||
| #endif | |||||
| } | |||||
| else | |||||
| { | |||||
| // didn't recognise the key provided! | |||||
| jassertfalse; | |||||
| return false; | |||||
| } | |||||
| return doesSDKPathContainFile (path, fileToCheckFor); | |||||
| } | |||||
| @@ -41,13 +41,6 @@ public: | |||||
| void flush(); | void flush(); | ||||
| void reload(); | void reload(); | ||||
| //============================================================================== | |||||
| void valueTreePropertyChanged (ValueTree&, const Identifier&) override { changed(); } | |||||
| void valueTreeChildAdded (ValueTree&, ValueTree&) override { changed(); } | |||||
| void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { changed(); } | |||||
| void valueTreeChildOrderChanged (ValueTree&, int, int) override { changed(); } | |||||
| void valueTreeParentChanged (ValueTree&) override { changed(); } | |||||
| //============================================================================== | //============================================================================== | ||||
| RecentlyOpenedFilesList recentFiles; | RecentlyOpenedFilesList recentFiles; | ||||
| @@ -71,11 +64,14 @@ public: | |||||
| StringArray monospacedFontNames; | StringArray monospacedFontNames; | ||||
| ValueTree projectDefaults; | |||||
| std::map<String, Value> pathValues; | |||||
| //============================================================================== | |||||
| Value getGlobalPath (const Identifier& key, DependencyPathOS); | |||||
| String getFallbackPath (const Identifier& key, DependencyPathOS); | |||||
| bool isGlobalPathValid (const Identifier& key, const String& path); | |||||
| private: | private: | ||||
| OwnedArray<PropertiesFile> propertyFiles; | OwnedArray<PropertiesFile> propertyFiles; | ||||
| ValueTree projectDefaults; | |||||
| void changed() | void changed() | ||||
| { | { | ||||
| @@ -91,6 +87,13 @@ private: | |||||
| void loadSwatchColours(); | void loadSwatchColours(); | ||||
| void saveSwatchColours(); | void saveSwatchColours(); | ||||
| //============================================================================== | |||||
| void valueTreePropertyChanged (ValueTree&, const Identifier&) override { changed(); } | |||||
| void valueTreeChildAdded (ValueTree&, ValueTree&) override { changed(); } | |||||
| void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { changed(); } | |||||
| void valueTreeChildOrderChanged (ValueTree&, int, int) override { changed(); } | |||||
| void valueTreeParentChanged (ValueTree&) override { changed(); } | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StoredSettings) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StoredSettings) | ||||
| }; | }; | ||||