| @@ -75,10 +75,13 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| Value getPListToMergeValue() { return getSetting ("customPList"); } | Value getPListToMergeValue() { return getSetting ("customPList"); } | ||||
| String getPListToMergeString() const { return settings ["customPList"]; } | |||||
| String getPListToMergeString() const { return settings ["customPList"]; } | |||||
| Value getExtraFrameworksValue() { return getSetting (Ids::extraFrameworks); } | Value getExtraFrameworksValue() { return getSetting (Ids::extraFrameworks); } | ||||
| String getExtraFrameworksString() const { return settings [Ids::extraFrameworks]; } | |||||
| String getExtraFrameworksString() const { return settings [Ids::extraFrameworks]; } | |||||
| Value getPostBuildScriptValue() { return getSetting (Ids::postbuildCommand); } | |||||
| String getPostBuildScript() const { return settings [Ids::postbuildCommand]; } | |||||
| int getLaunchPreferenceOrderForCurrentOS() | int getLaunchPreferenceOrderForCurrentOS() | ||||
| { | { | ||||
| @@ -138,6 +141,9 @@ public: | |||||
| props.add (new ChoicePropertyComponent (getLibraryType(), "Library Type", | props.add (new ChoicePropertyComponent (getLibraryType(), "Library Type", | ||||
| StringArray (libTypes), Array<var> (libTypeValues))); | StringArray (libTypes), Array<var> (libTypeValues))); | ||||
| } | } | ||||
| props.add (new TextPropertyComponent (getPostBuildScriptValue(), "Post-build shell script", 32768, true), | |||||
| "Some shell-script that will be run after a build completes."); | |||||
| } | } | ||||
| void launchProject() | void launchProject() | ||||
| @@ -615,14 +621,6 @@ private: | |||||
| { | { | ||||
| StringArray s; | StringArray s; | ||||
| { | |||||
| String srcRoot = rebaseFromProjectFolderToBuildTarget (RelativePath (".", RelativePath::projectFolder)).toUnixStyle(); | |||||
| if (srcRoot.endsWith ("/.")) | |||||
| srcRoot = srcRoot.dropLastCharacters (2); | |||||
| s.add ("SRCROOT = " + srcRoot.quoted()); | |||||
| } | |||||
| const String arch (config.getMacArchitecture()); | const String arch (config.getMacArchitecture()); | ||||
| if (arch == osxArch_Native) s.add ("ARCHS = \"$(ARCHS_NATIVE)\""); | if (arch == osxArch_Native) s.add ("ARCHS = \"$(ARCHS_NATIVE)\""); | ||||
| else if (arch == osxArch_32BitUniversal) s.add ("ARCHS = \"$(ARCHS_STANDARD_32_BIT)\""); | else if (arch == osxArch_32BitUniversal) s.add ("ARCHS = \"$(ARCHS_STANDARD_32_BIT)\""); | ||||
| @@ -1131,15 +1129,15 @@ private: | |||||
| void addShellScriptPhase() const | void addShellScriptPhase() const | ||||
| { | { | ||||
| if (xcodeShellScript.isNotEmpty()) | |||||
| if (getPostBuildScript().isNotEmpty()) | |||||
| { | { | ||||
| ValueTree* const v = addBuildPhase ("PBXShellScriptBuildPhase", StringArray()); | ValueTree* const v = addBuildPhase ("PBXShellScriptBuildPhase", StringArray()); | ||||
| v->setProperty (Ids::name, xcodeShellScriptTitle, 0); | |||||
| v->setProperty (Ids::name, "Post-build script", 0); | |||||
| v->setProperty ("shellPath", "/bin/sh", 0); | v->setProperty ("shellPath", "/bin/sh", 0); | ||||
| v->setProperty ("shellScript", xcodeShellScript.replace ("\\", "\\\\") | |||||
| .replace ("\"", "\\\"") | |||||
| .replace ("\r\n", "\\n") | |||||
| .replace ("\n", "\\n"), 0); | |||||
| v->setProperty ("shellScript", getPostBuildScript().replace ("\\", "\\\\") | |||||
| .replace ("\"", "\\\"") | |||||
| .replace ("\r\n", "\\n") | |||||
| .replace ("\n", "\\n"), 0); | |||||
| } | } | ||||
| } | } | ||||
| @@ -209,12 +209,13 @@ void ProjectExporter::createPropertyEditors (PropertyListBuilder& props) | |||||
| for (int i = 0; i < modules.size(); ++i) | for (int i = 0; i < modules.size(); ++i) | ||||
| modules.getUnchecked(i)->createPropertyEditors (*this, props); | modules.getUnchecked(i)->createPropertyEditors (*this, props); | ||||
| props.add (new TextPropertyComponent (getExporterPreprocessorDefs(), "Extra Preprocessor Definitions", 32768, false), | |||||
| "Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace or commas to separate the items - to include a space or comma in a definition, precede it with a backslash."); | |||||
| props.add (new TextPropertyComponent (getExporterPreprocessorDefs(), "Extra Preprocessor Definitions", 32768, true), | |||||
| "Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace, commas, " | |||||
| "or new-lines to separate the items - to include a space or comma in a definition, precede it with a backslash."); | |||||
| props.add (new TextPropertyComponent (getExtraCompilerFlags(), "Extra compiler flags", 2048, false), | |||||
| props.add (new TextPropertyComponent (getExtraCompilerFlags(), "Extra compiler flags", 2048, true), | |||||
| "Extra command-line flags to be passed to the compiler. This string can contain references to preprocessor definitions in the form ${NAME_OF_DEFINITION}, which will be replaced with their values."); | "Extra command-line flags to be passed to the compiler. This string can contain references to preprocessor definitions in the form ${NAME_OF_DEFINITION}, which will be replaced with their values."); | ||||
| props.add (new TextPropertyComponent (getExtraLinkerFlags(), "Extra linker flags", 2048, false), | |||||
| props.add (new TextPropertyComponent (getExtraLinkerFlags(), "Extra linker flags", 2048, true), | |||||
| "Extra command-line flags to be passed to the linker. You might want to use this for adding additional libraries. This string can contain references to preprocessor definitions in the form ${NAME_OF_VALUE}, which will be replaced with their values."); | "Extra command-line flags to be passed to the linker. You might want to use this for adding additional libraries. This string can contain references to preprocessor definitions in the form ${NAME_OF_VALUE}, which will be replaced with their values."); | ||||
| { | { | ||||
| @@ -500,17 +501,12 @@ void ProjectExporter::BuildConfiguration::createBasicPropertyEditors (PropertyLi | |||||
| "The folder in which the finished binary should be placed. Leave this blank to cause the binary to be placed " | "The folder in which the finished binary should be placed. Leave this blank to cause the binary to be placed " | ||||
| "in its default location in the build folder."); | "in its default location in the build folder."); | ||||
| props.add (new TextPropertyComponent (getHeaderSearchPathValue(), "Header search paths", 16384, false), | |||||
| "Extra header search paths. Use semi-colons to separate multiple paths."); | |||||
| props.addSearchPathProperty (getHeaderSearchPathValue(), "Header search paths", "Extra header search paths."); | |||||
| props.addSearchPathProperty (getLibrarySearchPathValue(), "Extra library search paths", "Extra library search paths."); | |||||
| props.add (new TextPropertyComponent (getLibrarySearchPathValue(), "Extra library search paths", 16384, false), | |||||
| "Extra library search paths. Use semi-colons to separate multiple paths."); | |||||
| props.add (new TextPropertyComponent (getBuildConfigPreprocessorDefs(), "Preprocessor definitions", 32768, false), | |||||
| "Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace or commas to separate " | |||||
| "the items - to include a space or comma in a definition, precede it with a backslash."); | |||||
| props.setPreferredHeight (22); | |||||
| props.add (new TextPropertyComponent (getBuildConfigPreprocessorDefs(), "Preprocessor definitions", 32768, true), | |||||
| "Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace, commas, or " | |||||
| "new-lines to separate the items - to include a space or comma in a definition, precede it with a backslash."); | |||||
| } | } | ||||
| StringPairArray ProjectExporter::BuildConfiguration::getAllPreprocessorDefs() const | StringPairArray ProjectExporter::BuildConfiguration::getAllPreprocessorDefs() const | ||||
| @@ -86,7 +86,7 @@ public: | |||||
| String getExtraCompilerFlagsString() const { return getSettingString (Ids::extraCompilerFlags); } | String getExtraCompilerFlagsString() const { return getSettingString (Ids::extraCompilerFlags); } | ||||
| Value getExtraLinkerFlags() { return getSetting (Ids::extraLinkerFlags); } | Value getExtraLinkerFlags() { return getSetting (Ids::extraLinkerFlags); } | ||||
| String getExtraLinkerFlagsString() const { return getSettingString (Ids::extraLinkerFlags); } | |||||
| String getExtraLinkerFlagsString() const { return getSettingString (Ids::extraLinkerFlags).replaceCharacters ("\r\n", " "); } | |||||
| // This adds the quotes, and may return angle-brackets, eg: <foo/bar.h> or normal quotes. | // This adds the quotes, and may return angle-brackets, eg: <foo/bar.h> or normal quotes. | ||||
| String getIncludePathForFileInJuceFolder (const String& pathFromJuceFolder, const File& targetIncludeFile) const; | String getIncludePathForFileInJuceFolder (const String& pathFromJuceFolder, const File& targetIncludeFile) const; | ||||
| @@ -130,8 +130,7 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| String xcodePackageType, xcodeBundleSignature, xcodeBundleExtension; | String xcodePackageType, xcodeBundleSignature, xcodeBundleExtension; | ||||
| String xcodeProductType, xcodeProductInstallPath, xcodeFileType; | String xcodeProductType, xcodeProductInstallPath, xcodeFileType; | ||||
| String xcodeShellScript, xcodeShellScriptTitle, xcodeOtherRezFlags; | |||||
| String xcodeExcludedFiles64Bit; | |||||
| String xcodeOtherRezFlags, xcodeExcludedFiles64Bit; | |||||
| bool xcodeIsBundle, xcodeCreatePList, xcodeCanUseDwarf; | bool xcodeIsBundle, xcodeCreatePList, xcodeCanUseDwarf; | ||||
| StringArray xcodeFrameworks; | StringArray xcodeFrameworks; | ||||
| Array<RelativePath> xcodeExtraLibrariesDebug, xcodeExtraLibrariesRelease; | Array<RelativePath> xcodeExtraLibrariesDebug, xcodeExtraLibrariesRelease; | ||||
| @@ -240,6 +240,10 @@ namespace RTASHelpers | |||||
| else | else | ||||
| getRTASFolder (exporter) = "~/SDKs/PT_80_SDK"; | getRTASFolder (exporter) = "~/SDKs/PT_80_SDK"; | ||||
| } | } | ||||
| if (exporter.settings [Ids::postbuildCommand].toString().isEmpty()) | |||||
| exporter.getSetting (Ids::postbuildCommand) = String::fromUTF8 (BinaryData::AudioPluginXCodeScript_txt, | |||||
| BinaryData::AudioPluginXCodeScript_txtSize); | |||||
| } | } | ||||
| static void addExtraSearchPaths (ProjectExporter& exporter) | static void addExtraSearchPaths (ProjectExporter& exporter) | ||||
| @@ -345,7 +349,7 @@ namespace RTASHelpers | |||||
| exporter.msvcDelayLoadedDLLs = "DAE.dll; DigiExt.dll; DSI.dll; PluginLib.dll; DSPManager.dll"; | exporter.msvcDelayLoadedDLLs = "DAE.dll; DigiExt.dll; DSI.dll; PluginLib.dll; DSPManager.dll"; | ||||
| if (! exporter.getExtraLinkerFlags().toString().contains ("/FORCE:multiple")) | |||||
| if (! exporter.getExtraLinkerFlagsString().contains ("/FORCE:multiple")) | |||||
| exporter.getExtraLinkerFlags() = exporter.getExtraLinkerFlags().toString() + " /FORCE:multiple"; | exporter.getExtraLinkerFlags() = exporter.getExtraLinkerFlags().toString() + " /FORCE:multiple"; | ||||
| for (ProjectExporter::ConfigIterator config (exporter); config.next();) | for (ProjectExporter::ConfigIterator config (exporter); config.next();) | ||||
| @@ -373,8 +373,6 @@ void Project::createPropertyEditors (PropertyListBuilder& props) | |||||
| props.add (new TextPropertyComponent (getProjectPreprocessorDefs(), "Preprocessor definitions", 32768, false), | props.add (new TextPropertyComponent (getProjectPreprocessorDefs(), "Preprocessor definitions", 32768, false), | ||||
| "Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace or commas to separate the items - to include a space or comma in a definition, precede it with a backslash."); | "Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace or commas to separate the items - to include a space or comma in a definition, precede it with a backslash."); | ||||
| props.setPreferredHeight (22); | |||||
| } | } | ||||
| String Project::getVersionAsHex() const | String Project::getVersionAsHex() const | ||||
| @@ -281,7 +281,6 @@ public: | |||||
| { | { | ||||
| ChoicePropertyComponent* c = new ChoicePropertyComponent (flags[i]->value, flags[i]->symbol, possibleValues, mappings); | ChoicePropertyComponent* c = new ChoicePropertyComponent (flags[i]->value, flags[i]->symbol, possibleValues, mappings); | ||||
| c->setTooltip (flags[i]->description); | c->setTooltip (flags[i]->description); | ||||
| c->setPreferredHeight (22); | |||||
| props.add (c); | props.add (c); | ||||
| } | } | ||||
| } | } | ||||
| @@ -644,13 +643,12 @@ struct ProjectSettingsTreeClasses | |||||
| void valueTreeChildOrderChanged (ValueTree&) {} | void valueTreeChildOrderChanged (ValueTree&) {} | ||||
| void valueTreeParentChanged (ValueTree&) {} | void valueTreeParentChanged (ValueTree&) {} | ||||
| static void updateSizes (Component& comp, PropertyGroup* groups, int numGroups) | |||||
| static void updateSize (Component& comp, PropertyGroup& group) | |||||
| { | { | ||||
| const int width = jmax (550, comp.getParentWidth() - 20); | const int width = jmax (550, comp.getParentWidth() - 20); | ||||
| int y = 0; | int y = 0; | ||||
| for (int i = 0; i < numGroups; ++i) | |||||
| y += groups[i].updateSize (12, y, width - 12); | |||||
| y += group.updateSize (12, y, width - 12); | |||||
| comp.setSize (width, y); | comp.setSize (width, y); | ||||
| } | } | ||||
| @@ -746,7 +744,7 @@ struct ProjectSettingsTreeClasses | |||||
| parentSizeChanged(); | parentSizeChanged(); | ||||
| } | } | ||||
| void parentSizeChanged() { updateSizes (*this, &group, 1); } | |||||
| void parentSizeChanged() { updateSize (*this, group); } | |||||
| private: | private: | ||||
| PropertyGroup group; | PropertyGroup group; | ||||
| @@ -875,7 +873,7 @@ struct ProjectSettingsTreeClasses | |||||
| parentSizeChanged(); | parentSizeChanged(); | ||||
| } | } | ||||
| void parentSizeChanged() { updateSizes (*this, &group, 1); } | |||||
| void parentSizeChanged() { updateSize (*this, group); } | |||||
| private: | private: | ||||
| PropertyGroup group; | PropertyGroup group; | ||||
| @@ -886,6 +884,58 @@ struct ProjectSettingsTreeClasses | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ExporterItem); | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ExporterItem); | ||||
| }; | }; | ||||
| //============================================================================== | |||||
| class ModulesItem : public SettingsItemBase | |||||
| { | |||||
| public: | |||||
| ModulesItem (Project& project_) : project (project_) {} | |||||
| bool isRoot() const { return false; } | |||||
| bool canBeSelected() const { return true; } | |||||
| bool mightContainSubItems() { return false; } | |||||
| String getUniqueName() const { return project.getProjectUID() + "_modules"; } | |||||
| String getRenamingName() const { return getDisplayName(); } | |||||
| String getDisplayName() const { return "Modules"; } | |||||
| void setName (const String&) {} | |||||
| bool isMissing() { return false; } | |||||
| const Drawable* getIcon() const { return project.getMainGroup().getIcon(); } | |||||
| void showDocument() { showSettingsPage (new SettingsComp (project)); } | |||||
| private: | |||||
| Project& project; | |||||
| //============================================================================== | |||||
| class SettingsComp : public Component | |||||
| { | |||||
| public: | |||||
| SettingsComp (Project& project_) : project (project_) | |||||
| { | |||||
| addAndMakeVisible (&group); | |||||
| PropertyListBuilder props; | |||||
| props.add (new ModulesPanel (project)); | |||||
| group.setProperties (props); | |||||
| group.setName ("Modules"); | |||||
| parentSizeChanged(); | |||||
| } | |||||
| void parentSizeChanged() | |||||
| { | |||||
| updateSize (*this, group); | |||||
| } | |||||
| private: | |||||
| Project& project; | |||||
| var lastProjectType; | |||||
| PropertyGroup group; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp); | |||||
| }; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModulesItem); | |||||
| }; | |||||
| //============================================================================== | //============================================================================== | ||||
| class RootItem : public SettingsItemBase | class RootItem : public SettingsItemBase | ||||
| { | { | ||||
| @@ -909,6 +959,8 @@ struct ProjectSettingsTreeClasses | |||||
| void addSubItems() | void addSubItems() | ||||
| { | { | ||||
| addSubItem (new ModulesItem (project)); | |||||
| int i = 0; | int i = 0; | ||||
| for (Project::ExporterIterator exporter (project); exporter.next(); ++i) | for (Project::ExporterIterator exporter (project); exporter.next(); ++i) | ||||
| addSubItem (new ExporterItem (project, exporter.exporter.release(), i)); | addSubItem (new ExporterItem (project, exporter.exporter.release(), i)); | ||||
| @@ -971,10 +1023,9 @@ struct ProjectSettingsTreeClasses | |||||
| SettingsComp (Project& project_) | SettingsComp (Project& project_) | ||||
| : project (project_) | : project (project_) | ||||
| { | { | ||||
| addAndMakeVisible (&groups[0]); | |||||
| addAndMakeVisible (&groups[1]); | |||||
| addAndMakeVisible (&group); | |||||
| createAllPanels(); | |||||
| updatePropertyList(); | |||||
| project.addChangeListener (this); | project.addChangeListener (this); | ||||
| } | } | ||||
| @@ -985,38 +1036,30 @@ struct ProjectSettingsTreeClasses | |||||
| void parentSizeChanged() | void parentSizeChanged() | ||||
| { | { | ||||
| updateSizes (*this, groups, 2); | |||||
| updateSize (*this, group); | |||||
| } | } | ||||
| void createAllPanels() | |||||
| void updatePropertyList() | |||||
| { | { | ||||
| { | |||||
| PropertyListBuilder props; | |||||
| project.createPropertyEditors (props); | |||||
| groups[0].setProperties (props); | |||||
| groups[0].setName ("Project Settings"); | |||||
| lastProjectType = project.getProjectTypeValue().getValue(); | |||||
| } | |||||
| PropertyListBuilder props; | PropertyListBuilder props; | ||||
| props.add (new ModulesPanel (project)); | |||||
| groups[1].setProperties (props); | |||||
| groups[1].setName ("Modules"); | |||||
| project.createPropertyEditors (props); | |||||
| group.setProperties (props); | |||||
| group.setName ("Project Settings"); | |||||
| lastProjectType = project.getProjectTypeValue().getValue(); | |||||
| parentSizeChanged(); | parentSizeChanged(); | ||||
| } | } | ||||
| void changeListenerCallback (ChangeBroadcaster*) | void changeListenerCallback (ChangeBroadcaster*) | ||||
| { | { | ||||
| if (lastProjectType != project.getProjectTypeValue().getValue()) | if (lastProjectType != project.getProjectTypeValue().getValue()) | ||||
| createAllPanels(); | |||||
| updatePropertyList(); | |||||
| } | } | ||||
| private: | private: | ||||
| Project& project; | Project& project; | ||||
| var lastProjectType; | var lastProjectType; | ||||
| PropertyGroup groups[2]; | |||||
| PropertyGroup group; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp); | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp); | ||||
| }; | }; | ||||
| @@ -275,9 +275,6 @@ public: | |||||
| exporter.xcodeProductType = "com.apple.product-type.bundle"; | exporter.xcodeProductType = "com.apple.product-type.bundle"; | ||||
| exporter.xcodeProductInstallPath = "$(HOME)/Library/Audio/Plug-Ins/Components/"; | exporter.xcodeProductInstallPath = "$(HOME)/Library/Audio/Plug-Ins/Components/"; | ||||
| exporter.xcodeShellScriptTitle = "Copy to the different plugin folders"; | |||||
| exporter.xcodeShellScript = String::fromUTF8 (BinaryData::AudioPluginXCodeScript_txt, BinaryData::AudioPluginXCodeScript_txtSize); | |||||
| exporter.xcodeOtherRezFlags = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64" | exporter.xcodeOtherRezFlags = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64" | ||||
| " -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers" | " -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers" | ||||
| " -I \\\"$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/AUBase\\\""; | " -I \\\"$(DEVELOPER_DIR)/Extras/CoreAudio/AudioUnits/AUPublic/AUBase\\\""; | ||||
| @@ -165,7 +165,7 @@ String replacePreprocessorDefs (const StringPairArray& definitions, String sourc | |||||
| StringArray getSearchPathsFromString (const String& searchPath) | StringArray getSearchPathsFromString (const String& searchPath) | ||||
| { | { | ||||
| StringArray s; | StringArray s; | ||||
| s.addTokens (searchPath, ";", String::empty); | |||||
| s.addTokens (searchPath, ";\r\n", String::empty); | |||||
| s.trim(); | s.trim(); | ||||
| s.removeEmptyStrings(); | s.removeEmptyStrings(); | ||||
| s.removeDuplicates (false); | s.removeDuplicates (false); | ||||
| @@ -91,6 +91,12 @@ public: | |||||
| add (propertyComp); | add (propertyComp); | ||||
| } | } | ||||
| void addSearchPathProperty (const Value& value, const String& name, const String& mainHelpText) | |||||
| { | |||||
| add (new TextPropertyComponent (value, name, 16384, true), | |||||
| mainHelpText + " Use semi-colons or new-lines to separate multiple paths."); | |||||
| } | |||||
| void setPreferredHeight (int height) | void setPreferredHeight (int height) | ||||
| { | { | ||||
| for (int j = components.size(); --j >= 0;) | for (int j = components.size(); --j >= 0;) | ||||
| @@ -2539,8 +2539,8 @@ void LookAndFeel::drawPropertyComponentLabel (Graphics& g, int, int height, | |||||
| const Rectangle<int> LookAndFeel::getPropertyComponentContentPosition (PropertyComponent& component) | const Rectangle<int> LookAndFeel::getPropertyComponentContentPosition (PropertyComponent& component) | ||||
| { | { | ||||
| return Rectangle<int> (component.getWidth() / 3, 1, | |||||
| component.getWidth() - component.getWidth() / 3 - 1, component.getHeight() - 3); | |||||
| const int textW = jmin (200, component.getWidth() / 3); | |||||
| return Rectangle<int> (textW, 1, component.getWidth() - textW - 1, component.getHeight() - 3); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -114,9 +114,7 @@ protected: | |||||
| */ | */ | ||||
| int preferredHeight; | int preferredHeight; | ||||
| private: | private: | ||||
| //============================================================================== | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyComponent); | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyComponent); | ||||
| }; | }; | ||||
| @@ -105,7 +105,7 @@ void TextPropertyComponent::createEditor (const int maxNumChars, const bool isMu | |||||
| if (isMultiLine) | if (isMultiLine) | ||||
| { | { | ||||
| textEditor->setJustificationType (Justification::topLeft); | textEditor->setJustificationType (Justification::topLeft); | ||||
| preferredHeight = 120; | |||||
| preferredHeight = 100; | |||||
| } | } | ||||
| } | } | ||||