@@ -60,7 +60,7 @@ void PathSettingsTab::textPropertyComponentChanged (TextPropertyComponent* textP | |||
{ | |||
Identifier keyName = getKeyForPropertyComponent (textPropertyComponent); | |||
Colour textColour = getAppSettings().isGlobalPathValid (keyName, textPropertyComponent->getText()) | |||
Colour textColour = getAppSettings().isGlobalPathValid (File::getCurrentWorkingDirectory(), keyName, textPropertyComponent->getText()) | |||
? Colours::black | |||
: Colours::red; | |||
@@ -129,10 +129,10 @@ public: | |||
props.add (new TextWithDefaultPropertyComponent<String> (androidVersionCode, "Android Version Code", 32), | |||
"An integer value that represents the version of the application code, relative to other versions."); | |||
props.add (new DependencyPathPropertyComponent (sdkPath, "Android SDK Path"), | |||
props.add (new DependencyPathPropertyComponent (project.getFile().getParentDirectory(), sdkPath, "Android SDK Path"), | |||
"The path to the Android SDK folder on the target build machine"); | |||
props.add (new DependencyPathPropertyComponent (ndkPath, "Android NDK Path"), | |||
props.add (new DependencyPathPropertyComponent (project.getFile().getParentDirectory(), ndkPath, "Android NDK Path"), | |||
"The path to the Android NDK folder on the target build machine"); | |||
props.add (new TextWithDefaultPropertyComponent<String> (androidMinimumSDK, "Minimum SDK version", 32), | |||
@@ -244,19 +244,19 @@ void ProjectExporter::createDependencyPathProperties (PropertyListBuilder& props | |||
{ | |||
if (supportsVST3() && (project.shouldBuildVST3().getValue() || project.isVST3PluginHost())) | |||
{ | |||
props.add (new DependencyPathPropertyComponent (getVST3PathValue(), "VST3 SDK Folder"), | |||
props.add (new DependencyPathPropertyComponent (project.getFile().getParentDirectory(), getVST3PathValue(), "VST3 SDK Folder"), | |||
"If you're building a VST3 plugin or host, this must be the folder containing the VST3 SDK. This can be an absolute path, or a path relative to the Projucer project file."); | |||
} | |||
if (supportsAAX() && project.shouldBuildAAX().getValue()) | |||
{ | |||
props.add (new DependencyPathPropertyComponent (getAAXPathValue(), "AAX SDK Folder"), | |||
props.add (new DependencyPathPropertyComponent (project.getFile().getParentDirectory(), getAAXPathValue(), "AAX SDK Folder"), | |||
"If you're building an AAX plugin, this must be the folder containing the AAX SDK. This can be an absolute path, or a path relative to the Projucer project file."); | |||
} | |||
if (supportsRTAS() && project.shouldBuildRTAS().getValue()) | |||
{ | |||
props.add (new DependencyPathPropertyComponent (getRTASPathValue(), "RTAS SDK Folder"), | |||
props.add (new DependencyPathPropertyComponent (project.getFile().getParentDirectory(), getRTASPathValue(), "RTAS SDK Folder"), | |||
"If you're building an RTAS, this must be the folder containing the RTAS SDK. This can be an absolute path, or a path relative to the Projucer project file."); | |||
} | |||
} | |||
@@ -40,20 +40,27 @@ DependencyPathValueSource::DependencyPathValueSource (const Value& projectSettin | |||
globalSettingsValue.addListener (this); | |||
} | |||
bool DependencyPathValueSource::isValidPath() const | |||
bool DependencyPathValueSource::isValidPath (const File& relativeTo) const | |||
{ | |||
// if we are on another OS than the one which this path setting is for, | |||
// we have no way of knowing whether the path is valid - so just assume it is: | |||
if (! appliesToThisOS()) | |||
return true; | |||
return getAppSettings().isGlobalPathValid (globalKey, getValue().toString()); | |||
return getAppSettings().isGlobalPathValid (relativeTo, globalKey, getValue().toString()); | |||
} | |||
bool DependencyPathValueSource::isValidPath() const | |||
{ | |||
return isValidPath (File::getCurrentWorkingDirectory()); | |||
} | |||
//============================================================================== | |||
DependencyPathPropertyComponent::DependencyPathPropertyComponent (const Value& value, | |||
DependencyPathPropertyComponent::DependencyPathPropertyComponent (const File& pathRelativeToUse, | |||
const Value& value, | |||
const String& propertyName) | |||
try : TextPropertyComponent (propertyName, 1024, false), | |||
pathRelativeTo (pathRelativeToUse), | |||
pathValue (value), | |||
pathValueSource (dynamic_cast<DependencyPathValueSource&> (pathValue.getValueSource())) | |||
{ | |||
@@ -100,11 +107,11 @@ void DependencyPathPropertyComponent::textWasEdited() | |||
Colour DependencyPathPropertyComponent::getTextColourToDisplay() const | |||
{ | |||
if (! pathValueSource.isUsingProjectSettings()) | |||
return pathValueSource.isValidPath() ? Colours::grey | |||
: Colours::lightpink; | |||
return pathValueSource.isValidPath (pathRelativeTo) ? Colours::grey | |||
: Colours::lightpink; | |||
return pathValueSource.isValidPath() ? Colours::black | |||
: Colours::red; | |||
return pathValueSource.isValidPath (pathRelativeTo) ? Colours::black | |||
: Colours::red; | |||
} | |||
void DependencyPathPropertyComponent::labelTextChanged (Label*) | |||
@@ -82,6 +82,8 @@ public: | |||
return os == TargetOS::getThisOS(); | |||
} | |||
bool isValidPath (const File& relativeTo) const; | |||
bool isValidPath() const; | |||
private: | |||
@@ -143,7 +145,8 @@ class DependencyPathPropertyComponent : public TextPropertyComponent, | |||
private Label::Listener | |||
{ | |||
public: | |||
DependencyPathPropertyComponent (const Value& value, | |||
DependencyPathPropertyComponent (const File& pathRelativeToUse, | |||
const Value& value, | |||
const String& propertyName); | |||
@@ -158,6 +161,10 @@ private: | |||
/** This function handles path changes because the global path changed. */ | |||
void valueChanged (Value& value) override; | |||
/** If the dependency path is relative, relative to which directory should | |||
we check if an object is available. */ | |||
File pathRelativeTo; | |||
/** the value that represents this dependency path setting. */ | |||
Value pathValue; | |||
@@ -218,10 +218,10 @@ void StoredSettings::ColourSelectorWithSwatches::setSwatchColour (int index, con | |||
} | |||
//============================================================================== | |||
static bool doesSDKPathContainFile (const String& path, const String& fileToCheckFor) | |||
static bool doesSDKPathContainFile (const File& relativeTo, const String& path, const String& fileToCheckFor) | |||
{ | |||
String actualPath = path.replace ("${user.home}", File::getSpecialLocation (File::userHomeDirectory).getFullPathName()); | |||
return File::getCurrentWorkingDirectory().getChildFile (actualPath + "/" + fileToCheckFor).existsAsFile(); | |||
return relativeTo.getChildFile (actualPath + "/" + fileToCheckFor).existsAsFile(); | |||
} | |||
Value StoredSettings::getGlobalPath (const Identifier& key, DependencyPathOS os) | |||
@@ -271,7 +271,7 @@ String StoredSettings::getFallbackPath (const Identifier& key, DependencyPathOS | |||
return String(); | |||
} | |||
bool StoredSettings::isGlobalPathValid (const Identifier& key, const String& path) | |||
bool StoredSettings::isGlobalPathValid (const File& relativeTo, const Identifier& key, const String& path) | |||
{ | |||
String fileToCheckFor; | |||
@@ -310,5 +310,5 @@ bool StoredSettings::isGlobalPathValid (const Identifier& key, const String& pat | |||
return false; | |||
} | |||
return doesSDKPathContainFile (path, fileToCheckFor); | |||
return doesSDKPathContainFile (relativeTo, path, fileToCheckFor); | |||
} |
@@ -67,7 +67,8 @@ public: | |||
//============================================================================== | |||
Value getGlobalPath (const Identifier& key, DependencyPathOS); | |||
String getFallbackPath (const Identifier& key, DependencyPathOS); | |||
bool isGlobalPathValid (const Identifier& key, const String& path); | |||
bool isGlobalPathValid (const File& relativeTo, const Identifier& key, const String& path); | |||
private: | |||
OwnedArray<PropertiesFile> propertyFiles; | |||