@@ -21,7 +21,7 @@ ifeq ($(CONFIG),Debug) | |||||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ~/SDKs/vstsdk2.4 -I ../../JuceLibraryCode -I ../../../../modules | CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ~/SDKs/vstsdk2.4 -I ../../JuceLibraryCode -I ../../../../modules | ||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 | CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 | ||||
CXXFLAGS += $(CFLAGS) | CXXFLAGS += $(CFLAGS) | ||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) --no-undefined -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||||
TARGET := JuceDemoPlugin.so | TARGET := JuceDemoPlugin.so | ||||
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) | BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) | ||||
@@ -41,7 +41,7 @@ ifeq ($(CONFIG),Release) | |||||
CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ~/SDKs/vstsdk2.4 -I ../../JuceLibraryCode -I ../../../../modules | CPPFLAGS := $(DEPFLAGS) -std=c++11 -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ~/SDKs/vstsdk2.4 -I ../../JuceLibraryCode -I ../../../../modules | ||||
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os | CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -Os | ||||
CXXFLAGS += $(CFLAGS) | CXXFLAGS += $(CFLAGS) | ||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||||
LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) --no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt | |||||
TARGET := JuceDemoPlugin.so | TARGET := JuceDemoPlugin.so | ||||
BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) | BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) | ||||
@@ -164,9 +164,7 @@ String GeneratedCode::getClassDeclaration() const | |||||
parentClassLines.addTokens (parentClasses, ",", StringRef()); | parentClassLines.addTokens (parentClasses, ",", StringRef()); | ||||
parentClassLines.addArray (getExtraParentClasses()); | parentClassLines.addArray (getExtraParentClasses()); | ||||
parentClassLines.trim(); | |||||
parentClassLines.removeEmptyStrings(); | |||||
parentClassLines.removeDuplicates (false); | |||||
parentClassLines = getCleanedStringArray (parentClassLines); | |||||
if (parentClassLines.contains ("public Button", false)) | if (parentClassLines.contains ("public Button", false)) | ||||
parentClassLines.removeString ("public Component", false); | parentClassLines.removeString ("public Component", false); | ||||
@@ -186,9 +184,7 @@ String GeneratedCode::getInitialiserList() const | |||||
if (parentClassInitialiser.isNotEmpty()) | if (parentClassInitialiser.isNotEmpty()) | ||||
inits.insert (0, parentClassInitialiser); | inits.insert (0, parentClassInitialiser); | ||||
inits.trim(); | |||||
inits.removeEmptyStrings(); | |||||
inits.removeDuplicates (false); | |||||
inits = getCleanedStringArray (inits); | |||||
String s; | String s; | ||||
@@ -217,12 +213,10 @@ String GeneratedCode::getInitialiserList() const | |||||
static String getIncludeFileCode (StringArray files) | static String getIncludeFileCode (StringArray files) | ||||
{ | { | ||||
files.trim(); | |||||
files.removeEmptyStrings(); | |||||
files.removeDuplicates (false); | |||||
String s; | String s; | ||||
files = getCleanedStringArray (files); | |||||
for (int i = 0; i < files.size(); ++i) | for (int i = 0; i < files.size(); ++i) | ||||
s << "#include \"" << files[i] << "\"\n"; | s << "#include \"" << files[i] << "\"\n"; | ||||
@@ -158,11 +158,7 @@ void JucerDocument::setParentClasses (const String& classes) | |||||
{ | { | ||||
if (classes != parentClasses) | if (classes != parentClasses) | ||||
{ | { | ||||
StringArray parentClassLines; | |||||
parentClassLines.addTokens (classes, ",", StringRef()); | |||||
parentClassLines.trim(); | |||||
parentClassLines.removeEmptyStrings(); | |||||
parentClassLines.removeDuplicates (false); | |||||
StringArray parentClassLines (getCleanedStringArray (StringArray::fromTokens (classes, ",", StringRef()))); | |||||
for (int i = parentClassLines.size(); --i >= 0;) | for (int i = parentClassLines.size(); --i >= 0;) | ||||
{ | { | ||||
@@ -336,9 +336,7 @@ private: | |||||
if (getInternetNeeded()) s.add ("android.permission.INTERNET"); | if (getInternetNeeded()) s.add ("android.permission.INTERNET"); | ||||
if (getAudioRecordNeeded()) s.add ("android.permission.RECORD_AUDIO"); | if (getAudioRecordNeeded()) s.add ("android.permission.RECORD_AUDIO"); | ||||
s.trim(); | |||||
s.removeDuplicates (false); | |||||
return s; | |||||
return getCleanedStringArray (s); | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
@@ -557,7 +555,8 @@ private: | |||||
String flags; | String flags; | ||||
StringArray searchPaths (extraSearchPaths); | StringArray searchPaths (extraSearchPaths); | ||||
searchPaths.addArray (config.getHeaderSearchPaths()); | searchPaths.addArray (config.getHeaderSearchPaths()); | ||||
searchPaths.removeDuplicates (false); | |||||
searchPaths = getCleanedStringArray (searchPaths); | |||||
for (int i = 0; i < searchPaths.size(); ++i) | for (int i = 0; i < searchPaths.size(); ++i) | ||||
flags << " -I " << FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i])).quoted(); | flags << " -I " << FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i])).quoted(); | ||||
@@ -95,7 +95,8 @@ public: | |||||
bool canLaunchProject() override { return false; } | bool canLaunchProject() override { return false; } | ||||
bool launchProject() override { return false; } | bool launchProject() override { return false; } | ||||
bool isCodeBlocksWindows() const override { return os == windowsTarget; } | bool isCodeBlocksWindows() const override { return os == windowsTarget; } | ||||
bool isCodeBlocksLinux() const override { return os == linuxTarget; } | |||||
bool isCodeBlocksLinux() const override { return isLinux(); } | |||||
bool isLinux() const override { return os == linuxTarget; } | |||||
bool usesMMFiles() const override { return false; } | bool usesMMFiles() const override { return false; } | ||||
bool canCopeWithDuplicateFiles() override { return false; } | bool canCopeWithDuplicateFiles() override { return false; } | ||||
@@ -153,14 +154,6 @@ private: | |||||
xml.createNewChildElement ("Option")->setAttribute ("compiler", "gcc"); | xml.createNewChildElement ("Option")->setAttribute ("compiler", "gcc"); | ||||
} | } | ||||
static StringArray cleanArray (StringArray s) | |||||
{ | |||||
s.trim(); | |||||
s.removeDuplicates (false); | |||||
s.removeEmptyStrings (true); | |||||
return s; | |||||
} | |||||
StringArray getDefines (const BuildConfiguration& config) const | StringArray getDefines (const BuildConfiguration& config) const | ||||
{ | { | ||||
StringPairArray defines; | StringPairArray defines; | ||||
@@ -191,7 +184,7 @@ private: | |||||
for (int i = 0; i < defines.size(); ++i) | for (int i = 0; i < defines.size(); ++i) | ||||
defs.add (defines.getAllKeys()[i] + "=" + defines.getAllValues()[i]); | defs.add (defines.getAllKeys()[i] + "=" + defines.getAllValues()[i]); | ||||
return cleanArray (defs); | |||||
return getCleanedStringArray (defs); | |||||
} | } | ||||
StringArray getCompilerFlags (const BuildConfiguration& config) const | StringArray getCompilerFlags (const BuildConfiguration& config) const | ||||
@@ -221,12 +214,12 @@ private: | |||||
} | } | ||||
} | } | ||||
return cleanArray (flags); | |||||
return getCleanedStringArray (flags); | |||||
} | } | ||||
StringArray getLinkerFlags (const BuildConfiguration& config) const | StringArray getLinkerFlags (const BuildConfiguration& config) const | ||||
{ | { | ||||
StringArray flags; | |||||
StringArray flags (makefileExtraLinkerFlags); | |||||
if (! config.isDebug()) | if (! config.isDebug()) | ||||
flags.add ("-s"); | flags.add ("-s"); | ||||
@@ -234,7 +227,7 @@ private: | |||||
flags.addTokens (replacePreprocessorTokens (config, getExtraLinkerFlagsString()).trim(), | flags.addTokens (replacePreprocessorTokens (config, getExtraLinkerFlagsString()).trim(), | ||||
" \n", "\"'"); | " \n", "\"'"); | ||||
return cleanArray (flags); | |||||
return getCleanedStringArray (flags); | |||||
} | } | ||||
StringArray getIncludePaths (const BuildConfiguration& config) const | StringArray getIncludePaths (const BuildConfiguration& config) const | ||||
@@ -250,7 +243,7 @@ private: | |||||
if (! isCodeBlocksWindows()) | if (! isCodeBlocksWindows()) | ||||
paths.add ("/usr/include/freetype2"); | paths.add ("/usr/include/freetype2"); | ||||
return cleanArray (paths); | |||||
return getCleanedStringArray (paths); | |||||
} | } | ||||
static int getTypeIndex (const ProjectType& type) | static int getTypeIndex (const ProjectType& type) | ||||
@@ -360,7 +353,7 @@ private: | |||||
libs.addTokens (getExternalLibrariesString(), ";\n", "\"'"); | libs.addTokens (getExternalLibrariesString(), ";\n", "\"'"); | ||||
libs = cleanArray (libs); | |||||
libs = getCleanedStringArray (libs); | |||||
for (int i = 0; i < libs.size(); ++i) | for (int i = 0; i < libs.size(); ++i) | ||||
setAddOption (*linker, "library", replacePreprocessorDefs (getAllPreprocessorDefs(), libs[i])); | setAddOption (*linker, "library", replacePreprocessorDefs (getAllPreprocessorDefs(), libs[i])); | ||||
@@ -291,8 +291,7 @@ protected: | |||||
{ | { | ||||
StringArray searchPaths (extraSearchPaths); | StringArray searchPaths (extraSearchPaths); | ||||
searchPaths.addArray (config.getHeaderSearchPaths()); | searchPaths.addArray (config.getHeaderSearchPaths()); | ||||
searchPaths.removeDuplicates (false); | |||||
return searchPaths; | |||||
return getCleanedStringArray (searchPaths); | |||||
} | } | ||||
virtual String createConfigName (const BuildConfiguration& config) const | virtual String createConfigName (const BuildConfiguration& config) const | ||||
@@ -52,6 +52,7 @@ public: | |||||
bool launchProject() override { return false; } | bool launchProject() override { return false; } | ||||
bool usesMMFiles() const override { return false; } | bool usesMMFiles() const override { return false; } | ||||
bool isLinuxMakefile() const override { return true; } | bool isLinuxMakefile() const override { return true; } | ||||
bool isLinux() const override { return true; } | |||||
bool canCopeWithDuplicateFiles() override { return false; } | bool canCopeWithDuplicateFiles() override { return false; } | ||||
void createExporterProperties (PropertyListBuilder&) override | void createExporterProperties (PropertyListBuilder&) override | ||||
@@ -147,7 +148,7 @@ private: | |||||
searchPaths.insert (0, "/usr/include/freetype2"); | searchPaths.insert (0, "/usr/include/freetype2"); | ||||
searchPaths.insert (0, "/usr/include"); | searchPaths.insert (0, "/usr/include"); | ||||
searchPaths.removeDuplicates (false); | |||||
searchPaths = getCleanedStringArray (searchPaths); | |||||
for (int i = 0; i < searchPaths.size(); ++i) | for (int i = 0; i < searchPaths.size(); ++i) | ||||
out << " -I " << escapeSpaces (FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i]))); | out << " -I " << escapeSpaces (FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i]))); | ||||
@@ -165,11 +166,18 @@ private: | |||||
{ | { | ||||
out << " LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR)"; | out << " LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR)"; | ||||
if (makefileIsDLL) | |||||
out << " -shared"; | |||||
{ | |||||
StringArray flags (makefileExtraLinkerFlags); | |||||
if (makefileIsDLL) | |||||
flags.add ("-shared"); | |||||
if (! config.isDebug()) | |||||
out << " -fvisibility=hidden"; | |||||
if (! config.isDebug()) | |||||
flags.add ("-fvisibility=hidden"); | |||||
if (flags.size() > 0) | |||||
out << " " << getCleanedStringArray (flags).joinIntoString (" "); | |||||
} | |||||
out << config.getGCCLibraryPathFlags(); | out << config.getGCCLibraryPathFlags(); | ||||
@@ -661,8 +661,8 @@ private: | |||||
StringArray paths (extraSearchPaths); | StringArray paths (extraSearchPaths); | ||||
paths.addArray (config.getHeaderSearchPaths()); | paths.addArray (config.getHeaderSearchPaths()); | ||||
paths.add ("$(inherited)"); | paths.add ("$(inherited)"); | ||||
paths.removeDuplicates (false); | |||||
paths.removeEmptyStrings(); | |||||
paths = getCleanedStringArray (paths); | |||||
for (int i = 0; i < paths.size(); ++i) | for (int i = 0; i < paths.size(); ++i) | ||||
{ | { | ||||
@@ -723,8 +723,7 @@ private: | |||||
for (int i = 0; i < xcodeLibs.size(); ++i) | for (int i = 0; i < xcodeLibs.size(); ++i) | ||||
flags.add (getLinkerFlagForLib (xcodeLibs[i])); | flags.add (getLinkerFlagForLib (xcodeLibs[i])); | ||||
flags.removeEmptyStrings (true); | |||||
flags.removeDuplicates (false); | |||||
flags = getCleanedStringArray (flags); | |||||
} | } | ||||
StringArray getProjectSettings (const XcodeBuildConfiguration& config) const | StringArray getProjectSettings (const XcodeBuildConfiguration& config) const | ||||
@@ -876,7 +875,7 @@ private: | |||||
s.add ("OTHER_LDFLAGS = \"" + linkerFlags.joinIntoString (" ") + "\""); | s.add ("OTHER_LDFLAGS = \"" + linkerFlags.joinIntoString (" ") + "\""); | ||||
librarySearchPaths.addArray (config.getLibrarySearchPaths()); | librarySearchPaths.addArray (config.getLibrarySearchPaths()); | ||||
librarySearchPaths.removeDuplicates (false); | |||||
librarySearchPaths = getCleanedStringArray (librarySearchPaths); | |||||
if (librarySearchPaths.size() > 0) | if (librarySearchPaths.size() > 0) | ||||
{ | { | ||||
@@ -926,11 +925,8 @@ private: | |||||
} | } | ||||
s.addTokens (config.getCustomXcodeFlags(), ",", "\"'"); | s.addTokens (config.getCustomXcodeFlags(), ",", "\"'"); | ||||
s.trim(); | |||||
s.removeEmptyStrings(); | |||||
s.removeDuplicates (false); | |||||
return s; | |||||
return getCleanedStringArray (s); | |||||
} | } | ||||
void addFrameworks() const | void addFrameworks() const | ||||
@@ -68,10 +68,11 @@ public: | |||||
virtual int getVisualStudioVersion() const { return 0; } | virtual int getVisualStudioVersion() const { return 0; } | ||||
virtual bool isCodeBlocksWindows() const { return false; } | virtual bool isCodeBlocksWindows() const { return false; } | ||||
virtual bool isCodeBlocksLinux() const { return false; } | virtual bool isCodeBlocksLinux() const { return false; } | ||||
virtual bool isLinuxMakefile() const { return false; } | |||||
virtual bool isAndroid() const { return false; } | virtual bool isAndroid() const { return false; } | ||||
virtual bool isWindows() const { return false; } | virtual bool isWindows() const { return false; } | ||||
virtual bool isLinuxMakefile() const { return false; } | |||||
virtual bool isLinux() const { return false; } | |||||
virtual bool isOSX() const { return false; } | virtual bool isOSX() const { return false; } | ||||
bool mayCompileOnCurrentOS() const | bool mayCompileOnCurrentOS() const | ||||
@@ -81,7 +82,7 @@ public: | |||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
return isWindows() || isAndroid(); | return isWindows() || isAndroid(); | ||||
#elif JUCE_LINUX | #elif JUCE_LINUX | ||||
return isLinuxMakefile() || isCodeBlocksLinux() || isAndroid(); | |||||
return isLinux() || isAndroid(); | |||||
#else | #else | ||||
#error | #error | ||||
#endif | #endif | ||||
@@ -173,7 +174,7 @@ public: | |||||
//============================================================================== | //============================================================================== | ||||
String makefileTargetSuffix; | String makefileTargetSuffix; | ||||
bool makefileIsDLL; | bool makefileIsDLL; | ||||
StringArray linuxLibs; | |||||
StringArray linuxLibs, makefileExtraLinkerFlags; | |||||
//============================================================================== | //============================================================================== | ||||
String msvcTargetSuffix; | String msvcTargetSuffix; | ||||
@@ -243,7 +243,7 @@ namespace VSTHelpers | |||||
if (exporter.isVisualStudio()) | if (exporter.isVisualStudio()) | ||||
exporter.extraSearchPaths.add (path.toWindowsStyle()); | exporter.extraSearchPaths.add (path.toWindowsStyle()); | ||||
else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux() || exporter.isXcode()) | |||||
else if (exporter.isLinux() || exporter.isXcode()) | |||||
exporter.extraSearchPaths.insert (0, path.toUnixStyle()); | exporter.extraSearchPaths.insert (0, path.toUnixStyle()); | ||||
} | } | ||||
} | } | ||||
@@ -282,7 +282,7 @@ namespace VSTHelpers | |||||
if (exporter.isWindows()) | if (exporter.isWindows()) | ||||
exporter.extraSearchPaths.add (juceWrapperFolder.toWindowsStyle()); | exporter.extraSearchPaths.add (juceWrapperFolder.toWindowsStyle()); | ||||
else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux() ) | |||||
else if (exporter.isLinux()) | |||||
exporter.extraSearchPaths.add (juceWrapperFolder.toUnixStyle()); | exporter.extraSearchPaths.add (juceWrapperFolder.toUnixStyle()); | ||||
if (exporter.isVisualStudio()) | if (exporter.isVisualStudio()) | ||||
@@ -305,6 +305,9 @@ namespace VSTHelpers | |||||
config->getValue (Ids::postbuildCommand) = "copy /Y \"$(OutDir)\\$(TargetFileName)\" \"$(OutDir)\\$(TargetName).vst3\""; | config->getValue (Ids::postbuildCommand) = "copy /Y \"$(OutDir)\\$(TargetFileName)\" \"$(OutDir)\\$(TargetName).vst3\""; | ||||
} | } | ||||
} | } | ||||
if (exporter.isLinux()) | |||||
exporter.makefileExtraLinkerFlags.add ("--no-undefined"); | |||||
} | } | ||||
static inline void createPropertyEditors (ProjectExporter& exporter, PropertyListBuilder& props, bool isVST3) | static inline void createPropertyEditors (ProjectExporter& exporter, PropertyListBuilder& props, bool isVST3) | ||||
@@ -370,7 +370,7 @@ void LibraryModule::prepareExporter (ProjectExporter& exporter, ProjectSaver& pr | |||||
parseAndAddLibs (exporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString()); | parseAndAddLibs (exporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString()); | ||||
} | } | ||||
else if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux()) | |||||
else if (exporter.isLinux()) | |||||
{ | { | ||||
parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["LinuxLibs"].toString()); | parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["LinuxLibs"].toString()); | ||||
} | } | ||||
@@ -501,7 +501,7 @@ static bool fileTargetMatches (ProjectExporter& exporter, const String& target) | |||||
return exporterTargetMatches ("xcode", target); | return exporterTargetMatches ("xcode", target); | ||||
if (exporter.isWindows()) | if (exporter.isWindows()) | ||||
return exporterTargetMatches ("msvc", target); | return exporterTargetMatches ("msvc", target); | ||||
if (exporter.isLinuxMakefile() || exporter.isCodeBlocksLinux()) | |||||
if (exporter.isLinux()) | |||||
return exporterTargetMatches ("linux", target); | return exporterTargetMatches ("linux", target); | ||||
if (exporter.isAndroid()) | if (exporter.isAndroid()) | ||||
return exporterTargetMatches ("android", target); | return exporterTargetMatches ("android", target); | ||||
@@ -165,16 +165,18 @@ StringArray getSearchPathsFromString (const String& searchPath) | |||||
{ | { | ||||
StringArray s; | StringArray s; | ||||
s.addTokens (searchPath, ";\r\n", StringRef()); | s.addTokens (searchPath, ";\r\n", StringRef()); | ||||
s.trim(); | |||||
s.removeEmptyStrings(); | |||||
s.removeDuplicates (false); | |||||
return s; | |||||
return getCleanedStringArray (s); | |||||
} | } | ||||
StringArray getCommaOrWhitespaceSeparatedItems (const String& sourceString) | StringArray getCommaOrWhitespaceSeparatedItems (const String& sourceString) | ||||
{ | { | ||||
StringArray s; | StringArray s; | ||||
s.addTokens (sourceString, ", \t\r\n", StringRef()); | s.addTokens (sourceString, ", \t\r\n", StringRef()); | ||||
return getCleanedStringArray (s); | |||||
} | |||||
StringArray getCleanedStringArray (StringArray s) | |||||
{ | |||||
s.trim(); | s.trim(); | ||||
s.removeEmptyStrings(); | s.removeEmptyStrings(); | ||||
s.removeDuplicates (false); | s.removeDuplicates (false); | ||||
@@ -56,6 +56,8 @@ void showSVGPathDataToolWindow (ScopedPointer<Component>& ownerPointer); | |||||
bool cancelAnyModalComponents(); | bool cancelAnyModalComponents(); | ||||
bool reinvokeCommandAfterCancellingModalComps (const ApplicationCommandTarget::InvocationInfo&); | bool reinvokeCommandAfterCancellingModalComps (const ApplicationCommandTarget::InvocationInfo&); | ||||
StringArray getCleanedStringArray (StringArray); | |||||
//============================================================================== | //============================================================================== | ||||
class RolloverHelpComp : public Component, | class RolloverHelpComp : public Component, | ||||
private Timer | private Timer | ||||