Browse Source

Projucer: Added new start page window

tags/2021-05-28
ed 5 years ago
parent
commit
3283f2224a
100 changed files with 2419 additions and 2848 deletions
  1. +18
    -12
      extras/Projucer/Builds/LinuxMakefile/Makefile
  2. +96
    -163
      extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
  3. +10
    -21
      extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj
  4. +32
    -59
      extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters
  5. +10
    -21
      extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
  6. +32
    -59
      extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
  7. +10
    -21
      extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
  8. +32
    -59
      extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
  9. +4
    -4
      extras/Projucer/CMakeLists.txt
  10. +74
    -186
      extras/Projucer/JuceLibraryCode/BinaryData.cpp
  11. +18
    -21
      extras/Projucer/JuceLibraryCode/BinaryData.h
  12. +24
    -42
      extras/Projucer/Projucer.jucer
  13. +305
    -0
      extras/Projucer/Source/Application/StartPage/jucer_ContentComponents.h
  14. +244
    -0
      extras/Projucer/Source/Application/StartPage/jucer_NewProjectTemplates.h
  15. +270
    -0
      extras/Projucer/Source/Application/StartPage/jucer_NewProjectWizard.cpp
  16. +10
    -1
      extras/Projucer/Source/Application/StartPage/jucer_NewProjectWizard.h
  17. +263
    -0
      extras/Projucer/Source/Application/StartPage/jucer_StartPageComponent.cpp
  18. +13
    -22
      extras/Projucer/Source/Application/StartPage/jucer_StartPageComponent.h
  19. +167
    -0
      extras/Projucer/Source/Application/StartPage/jucer_StartPageTreeHolder.h
  20. +11
    -8
      extras/Projucer/Source/Application/Windows/jucer_PIPCreatorWindowComponent.h
  21. +8
    -26
      extras/Projucer/Source/Application/jucer_Application.cpp
  22. +4
    -3
      extras/Projucer/Source/Application/jucer_Application.h
  23. +52
    -115
      extras/Projucer/Source/Application/jucer_MainWindow.cpp
  24. +6
    -4
      extras/Projucer/Source/Application/jucer_MainWindow.h
  25. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h
  26. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h
  27. +1
    -1
      extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h
  28. +1
    -1
      extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentTemplate.h
  29. +1
    -1
      extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp
  30. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h
  31. +1
    -1
      extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h
  32. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h
  33. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompTemplate.h
  34. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_InlineComponentTemplate.h
  35. +1
    -1
      extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp
  36. +0
    -104
      extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp
  37. +1
    -1
      extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp
  38. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_NewComponentTemplate.h
  39. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h
  40. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h
  41. +2
    -2
      extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h
  42. +1
    -1
      extras/Projucer/Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h
  43. +3
    -3
      extras/Projucer/Source/CodeEditor/jucer_DocumentEditorComponent.h
  44. +6
    -6
      extras/Projucer/Source/ComponentEditor/Components/jucer_GroupComponentHandler.h
  45. +7
    -7
      extras/Projucer/Source/ComponentEditor/Components/jucer_ImageButtonHandler.h
  46. +6
    -6
      extras/Projucer/Source/ComponentEditor/Components/jucer_JucerComponentHandler.h
  47. +30
    -30
      extras/Projucer/Source/ComponentEditor/Components/jucer_LabelHandler.h
  48. +15
    -15
      extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h
  49. +12
    -11
      extras/Projucer/Source/ComponentEditor/Components/jucer_ViewportHandler.h
  50. +3
    -5
      extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ElementSiblingComponent.h
  51. +10
    -9
      extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElement.h
  52. +12
    -12
      extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp
  53. +6
    -6
      extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementRoundedRectangle.h
  54. +24
    -24
      extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementText.h
  55. +9
    -9
      extras/Projucer/Source/ComponentEditor/Properties/jucer_ColourPropertyComponent.h
  56. +4
    -4
      extras/Projucer/Source/ComponentEditor/Properties/jucer_FilePropertyComponent.h
  57. +4
    -3
      extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.h
  58. +8
    -8
      extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h
  59. +11
    -11
      extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.h
  60. +2
    -2
      extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.cpp
  61. +3
    -2
      extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.h
  62. +2
    -2
      extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h
  63. +8
    -8
      extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp
  64. +1
    -1
      extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp
  65. +3
    -3
      extras/Projucer/Source/Project/UI/Sidebar/jucer_ExporterTreeItems.h
  66. +12
    -12
      extras/Projucer/Source/Project/UI/Sidebar/jucer_FileTreeItems.h
  67. +2
    -2
      extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h
  68. +1
    -1
      extras/Projucer/Source/Project/UI/Sidebar/jucer_TreeItemTypes.h
  69. +10
    -8
      extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp
  70. +2
    -2
      extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h
  71. +25
    -22
      extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp
  72. +5
    -4
      extras/Projucer/Source/Project/UI/jucer_ProjectMessagesComponent.h
  73. +10
    -23
      extras/Projucer/Source/Project/jucer_Project.cpp
  74. +10
    -13
      extras/Projucer/Source/Project/jucer_Project.h
  75. +9
    -18
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h
  76. +14
    -14
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h
  77. +17
    -27
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h
  78. +18
    -12
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h
  79. +5
    -5
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
  80. +20
    -8
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
  81. +126
    -167
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp
  82. +18
    -60
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
  83. +3
    -3
      extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp
  84. +1
    -1
      extras/Projucer/Source/Settings/jucer_StoredSettings.h
  85. +67
    -2
      extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp
  86. +5
    -3
      extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h
  87. +16
    -7
      extras/Projucer/Source/Utility/Helpers/jucer_NewFileWizard.cpp
  88. +1
    -1
      extras/Projucer/Source/Utility/Helpers/jucer_NewFileWizard.h
  89. +66
    -0
      extras/Projucer/Source/Utility/Helpers/jucer_ValueWithDefaultWrapper.h
  90. +19
    -16
      extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp
  91. +3
    -3
      extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.h
  92. +5
    -4
      extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_ColourPropertyComponent.h
  93. +0
    -197
      extras/Projucer/Source/Wizards/jucer_NewProjectWizard.h
  94. +0
    -82
      extras/Projucer/Source/Wizards/jucer_NewProjectWizardClasses.cpp
  95. +0
    -505
      extras/Projucer/Source/Wizards/jucer_NewProjectWizardComponent.h
  96. +0
    -112
      extras/Projucer/Source/Wizards/jucer_ProjectWizard_Animated.h
  97. +0
    -121
      extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioApp.h
  98. +0
    -105
      extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioPlugin.h
  99. +0
    -42
      extras/Projucer/Source/Wizards/jucer_ProjectWizard_Blank.h
  100. +0
    -81
      extras/Projucer/Source/Wizards/jucer_ProjectWizard_Console.h

+ 18
- 12
extras/Projucer/Builds/LinuxMakefile/Makefile View File

@@ -68,6 +68,8 @@ ifeq ($(CONFIG),Release)
endif

OBJECTS_APP := \
$(JUCE_OBJDIR)/jucer_NewProjectWizard_7817a7e4.o \
$(JUCE_OBJDIR)/jucer_StartPageComponent_de6b22ec.o \
$(JUCE_OBJDIR)/jucer_AutoUpdater_ca658dc2.o \
$(JUCE_OBJDIR)/jucer_CommandLine_f35de107.o \
$(JUCE_OBJDIR)/jucer_Main_f8488f5b.o \
@@ -111,14 +113,13 @@ OBJECTS_APP := \
$(JUCE_OBJDIR)/jucer_CodeHelpers_1e797672.o \
$(JUCE_OBJDIR)/jucer_FileHelpers_54f12f83.o \
$(JUCE_OBJDIR)/jucer_MiscUtilities_31fc8dd8.o \
$(JUCE_OBJDIR)/jucer_NewFileWizard_b233dda1.o \
$(JUCE_OBJDIR)/jucer_VersionInfo_46f3ed40.o \
$(JUCE_OBJDIR)/jucer_PIPGenerator_fd3402c7.o \
$(JUCE_OBJDIR)/jucer_Icons_d02d18f1.o \
$(JUCE_OBJDIR)/jucer_JucerTreeViewBase_9b9f2ff0.o \
$(JUCE_OBJDIR)/jucer_ProjucerLookAndFeel_3b20291d.o \
$(JUCE_OBJDIR)/jucer_SlidingPanelComponent_4e7dc07e.o \
$(JUCE_OBJDIR)/jucer_NewFileWizard_fac97f47.o \
$(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \
$(JUCE_OBJDIR)/BinaryData_ce4232d4.o \
$(JUCE_OBJDIR)/include_juce_build_tools_f5069398.o \
$(JUCE_OBJDIR)/include_juce_core_f26d17db.o \
@@ -142,6 +143,16 @@ $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES)
-$(V_AT)mkdir -p $(JUCE_OUTDIR)
$(V_AT)$(CXX) -o $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(OBJECTS_APP) $(JUCE_LDFLAGS) $(JUCE_LDFLAGS_APP) $(RESOURCES) $(TARGET_ARCH)

$(JUCE_OBJDIR)/jucer_NewProjectWizard_7817a7e4.o: ../../Source/Application/StartPage/jucer_NewProjectWizard.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling jucer_NewProjectWizard.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/jucer_StartPageComponent_de6b22ec.o: ../../Source/Application/StartPage/jucer_StartPageComponent.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling jucer_StartPageComponent.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/jucer_AutoUpdater_ca658dc2.o: ../../Source/Application/jucer_AutoUpdater.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling jucer_AutoUpdater.cpp"
@@ -357,6 +368,11 @@ $(JUCE_OBJDIR)/jucer_MiscUtilities_31fc8dd8.o: ../../Source/Utility/Helpers/juce
@echo "Compiling jucer_MiscUtilities.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/jucer_NewFileWizard_b233dda1.o: ../../Source/Utility/Helpers/jucer_NewFileWizard.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling jucer_NewFileWizard.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/jucer_VersionInfo_46f3ed40.o: ../../Source/Utility/Helpers/jucer_VersionInfo.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling jucer_VersionInfo.cpp"
@@ -387,16 +403,6 @@ $(JUCE_OBJDIR)/jucer_SlidingPanelComponent_4e7dc07e.o: ../../Source/Utility/UI/j
@echo "Compiling jucer_SlidingPanelComponent.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/jucer_NewFileWizard_fac97f47.o: ../../Source/Wizards/jucer_NewFileWizard.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling jucer_NewFileWizard.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o: ../../Source/Wizards/jucer_NewProjectWizardClasses.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling jucer_NewProjectWizardClasses.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"

$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling BinaryData.cpp"


+ 96
- 163
extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj View File

@@ -77,6 +77,14 @@
isa = PBXBuildFile;
fileRef = 951128CA33CCDEF570436B1C;
};
0A89E8E0E99C3B5B2B38F2E6 = {
isa = PBXBuildFile;
fileRef = C2835F16963B34839FC36220;
};
908B7D4FB180F53405DA8EF9 = {
isa = PBXBuildFile;
fileRef = 82C18723A3D0E39BBD8F0F6E;
};
6DD9DA1677A6CF789CDAB478 = {
isa = PBXBuildFile;
fileRef = 0D4D508C638BC74943B9976D;
@@ -249,6 +257,10 @@
isa = PBXBuildFile;
fileRef = 486E8D02DAD2A0BF54A901C0;
};
4581B3A9A0D92FC01D4149EF = {
isa = PBXBuildFile;
fileRef = E4532338917106FA0B61A429;
};
44AD0D81A65C5EAE3BE588FD = {
isa = PBXBuildFile;
fileRef = FF3A6A384D536E1AEF47CD54;
@@ -273,14 +285,6 @@
isa = PBXBuildFile;
fileRef = 0CECD562059DFD7FBFB37E3C;
};
518DD443B6F17A5AFD707263 = {
isa = PBXBuildFile;
fileRef = A69024A225F2AC31F17B1314;
};
B7EBA1A83575F48CD08140B9 = {
isa = PBXBuildFile;
fileRef = 4B083E951ECB62217C46CB01;
};
3C5267E06A897B0DC0F7EA50 = {
isa = PBXBuildFile;
fileRef = 472F9A90F685220D730EBF6C;
@@ -394,13 +398,6 @@
path = "../../Source/ComponentEditor/Components/jucer_ViewportHandler.h";
sourceTree = "SOURCE_ROOT";
};
05D67B5A8D64947C067C0945 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_GUIApp.h";
path = "../../Source/Wizards/jucer_ProjectWizard_GUIApp.h";
sourceTree = "SOURCE_ROOT";
};
0640E34282A97BF73CC8F1EB = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -415,13 +412,6 @@
path = "../../Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp";
sourceTree = "SOURCE_ROOT";
};
087CB3A961CD3C7434D660A4 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_NewProjectWizard.h";
path = "../../Source/Wizards/jucer_NewProjectWizard.h";
sourceTree = "SOURCE_ROOT";
};
09DE066936CF037E9709ADB1 = {
isa = PBXFileReference;
explicitFileType = wrapper.application;
@@ -464,13 +454,6 @@
path = "../../Source/ComponentEditor/UI/jucer_ResourceEditorPanel.cpp";
sourceTree = "SOURCE_ROOT";
};
0F01067432AC314EAC213C1C = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_Blank.h";
path = "../../Source/Wizards/jucer_ProjectWizard_Blank.h";
sourceTree = "SOURCE_ROOT";
};
0F8C000E5FF4A2DAC1FEF8EB = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
@@ -478,13 +461,6 @@
path = "../../Source/Utility/UI/jucer_ProjucerLookAndFeel.cpp";
sourceTree = "SOURCE_ROOT";
};
11DC04468BC6023671017EBF = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_NewFileWizard.h";
path = "../../Source/Wizards/jucer_NewFileWizard.h";
sourceTree = "SOURCE_ROOT";
};
11DEED05110D3D1D02FCFFB6 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -576,6 +552,13 @@
path = "../../Source/Project/UI/Sidebar/jucer_ProjectTab.h";
sourceTree = "SOURCE_ROOT";
};
1D7D2E563E8491643C9F2748 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_StartPageComponent.h";
path = "../../Source/Application/StartPage/jucer_StartPageComponent.h";
sourceTree = "SOURCE_ROOT";
};
1DCA18E935A35D29D2D9B6A0 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
@@ -590,6 +573,13 @@
path = "../../JuceLibraryCode/include_juce_data_structures.mm";
sourceTree = "SOURCE_ROOT";
};
1F0E279DB49BBF49D81C6D0D = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_NewProjectTemplates.h";
path = "../../Source/Application/StartPage/jucer_NewProjectTemplates.h";
sourceTree = "SOURCE_ROOT";
};
20075A86A4D0E8A5B973D9DB = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -632,6 +622,13 @@
path = ../../../Build/CMake/RecentFilesMenuTemplate.nib;
sourceTree = "SOURCE_ROOT";
};
234251407CD1A499D8A816BB = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ValueWithDefaultWrapper.h";
path = "../../Source/Utility/Helpers/jucer_ValueWithDefaultWrapper.h";
sourceTree = "SOURCE_ROOT";
};
23A8DE16C0CDB8EED18B008B = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -814,13 +811,6 @@
path = "../../Source/LiveBuildEngine/UI/jucer_ErrorListComponent.h";
sourceTree = "SOURCE_ROOT";
};
3C95FA2AA91EBA19ADDD5C29 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_Animated.h";
path = "../../Source/Wizards/jucer_ProjectWizard_Animated.h";
sourceTree = "SOURCE_ROOT";
};
3D36F0CEB84B27BD02FC461A = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -912,13 +902,6 @@
path = ../../../Build/CMake/PIPComponent.cpp.in;
sourceTree = "SOURCE_ROOT";
};
471C7B0A8B92320AF0C80839 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_StaticLibrary.h";
path = "../../Source/Wizards/jucer_ProjectWizard_StaticLibrary.h";
sourceTree = "SOURCE_ROOT";
};
472F9A90F685220D730EBF6C = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
@@ -940,11 +923,11 @@
path = "../../Source/Project/UI/Sidebar/jucer_FileTreeItems.h";
sourceTree = "SOURCE_ROOT";
};
4A4EBDAD8D098F72CE053235 = {
497E1F5F0894B87461734963 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_AudioPlugin.h";
path = "../../Source/Wizards/jucer_ProjectWizard_AudioPlugin.h";
name = "jucer_StartPageTreeHolder.h";
path = "../../Source/Application/StartPage/jucer_StartPageTreeHolder.h";
sourceTree = "SOURCE_ROOT";
};
4AE469CD40BDAD634135785E = {
@@ -961,13 +944,6 @@
path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp";
sourceTree = "SOURCE_ROOT";
};
4B083E951ECB62217C46CB01 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
name = "jucer_NewProjectWizardClasses.cpp";
path = "../../Source/Wizards/jucer_NewProjectWizardClasses.cpp";
sourceTree = "SOURCE_ROOT";
};
4D5F0CA8D1273144681A1D48 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
@@ -1052,6 +1028,13 @@
path = "../../Source/CodeEditor/jucer_DocumentEditorComponent.h";
sourceTree = "SOURCE_ROOT";
};
52E30AD23A8BE69D5766AF6D = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_NewFileWizard.h";
path = "../../Source/Utility/Helpers/jucer_NewFileWizard.h";
sourceTree = "SOURCE_ROOT";
};
5432B7B9B2CF2EAEC8B66D5C = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -1304,13 +1287,6 @@
path = "../../Source/ComponentEditor/Components/jucer_GroupComponentHandler.h";
sourceTree = "SOURCE_ROOT";
};
714267352CE5C4357ADBC231 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_StartPageComponent.h";
path = "../../Source/Wizards/jucer_StartPageComponent.h";
sourceTree = "SOURCE_ROOT";
};
719B56C8587863D7AE9B69C6 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -1416,6 +1392,13 @@
path = System/Library/Frameworks/Accelerate.framework;
sourceTree = SDKROOT;
};
82C18723A3D0E39BBD8F0F6E = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
name = "jucer_StartPageComponent.cpp";
path = "../../Source/Application/StartPage/jucer_StartPageComponent.cpp";
sourceTree = "SOURCE_ROOT";
};
8336A43CE1C3C26D7C7B53D8 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
@@ -1465,20 +1448,6 @@
path = "../../Source/CodeEditor/jucer_LiveBuildCodeEditor.h";
sourceTree = "SOURCE_ROOT";
};
8A825FDDC00DD253F44D2C3A = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_AudioApp.h";
path = "../../Source/Wizards/jucer_ProjectWizard_AudioApp.h";
sourceTree = "SOURCE_ROOT";
};
8BD8E9DA627D6EF9BA10FB9E = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_NewProjectWizardComponent.h";
path = "../../Source/Wizards/jucer_NewProjectWizardComponent.h";
sourceTree = "SOURCE_ROOT";
};
8C52A3DDA62A746AA7A68535 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
@@ -1612,13 +1581,6 @@
path = "../../Source/Project/UI/Sidebar/jucer_TabComponents.h";
sourceTree = "SOURCE_ROOT";
};
97A847B59EE04483E8850E4B = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
name = "jucer_MainTemplate_SimpleWindow.cpp";
path = "../../Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp";
sourceTree = "SOURCE_ROOT";
};
983CFBA01CA8811F30FA7F4C = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -1647,13 +1609,6 @@
path = ../../Source/BinaryData/gradle/LICENSE;
sourceTree = "SOURCE_ROOT";
};
9992E6950C64322A11E39ADF = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_DLL.h";
path = "../../Source/Wizards/jucer_ProjectWizard_DLL.h";
sourceTree = "SOURCE_ROOT";
};
9A3B8BBDA8E144A3DF6B9349 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -1752,13 +1707,6 @@
path = "../../Source/LiveBuildEngine/jucer_CompileEngineSettings.h";
sourceTree = "SOURCE_ROOT";
};
A085174413736ACC8D7D42A2 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_openGL.h";
path = "../../Source/Wizards/jucer_ProjectWizard_openGL.h";
sourceTree = "SOURCE_ROOT";
};
A0BBBFBA13A1308B3CD725D5 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -1787,13 +1735,6 @@
path = "../../Source/ComponentEditor/Components/jucer_TreeViewHandler.h";
sourceTree = "SOURCE_ROOT";
};
A44A774EFC020D3D046A9249 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ProjectWizard_Console.h";
path = "../../Source/Wizards/jucer_ProjectWizard_Console.h";
sourceTree = "SOURCE_ROOT";
};
A49503B646A7BD2BEEFC5CBD = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -1815,20 +1756,6 @@
path = "../../Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp";
sourceTree = "SOURCE_ROOT";
};
A69024A225F2AC31F17B1314 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
name = "jucer_NewFileWizard.cpp";
path = "../../Source/Wizards/jucer_NewFileWizard.cpp";
sourceTree = "SOURCE_ROOT";
};
A6C4AE13FB409DE414094CFA = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_RelativePath.h";
path = "../../Source/Utility/Helpers/jucer_RelativePath.h";
sourceTree = "SOURCE_ROOT";
};
A978DFE87D9BB5EFE5B3DAAC = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -1850,6 +1777,13 @@
path = "../../../../modules/juce_cryptography";
sourceTree = "SOURCE_ROOT";
};
AAF90697C0F171EFC3984A5D = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_ContentComponents.h";
path = "../../Source/Application/StartPage/jucer_ContentComponents.h";
sourceTree = "SOURCE_ROOT";
};
ADA538034910F52FDD2DC88D = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
@@ -2018,13 +1952,6 @@
path = "../../Source/Project/jucer_Project.h";
sourceTree = "SOURCE_ROOT";
};
C09BBB58CA45B66D693E8C31 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_TemplateThumbnailsComponent.h";
path = "../../Source/Wizards/jucer_TemplateThumbnailsComponent.h";
sourceTree = "SOURCE_ROOT";
};
C16F9F479A3A5F6DAD7647A2 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -2039,11 +1966,11 @@
path = "../../Source/ComponentEditor/jucer_PaintRoutine.cpp";
sourceTree = "SOURCE_ROOT";
};
C2990A8D054BC230E7C637C3 = {
C2835F16963B34839FC36220 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_NewProjectWizardClasses.h";
path = "../../Source/Wizards/jucer_NewProjectWizardClasses.h";
lastKnownFileType = sourcecode.cpp.cpp;
name = "jucer_NewProjectWizard.cpp";
path = "../../Source/Application/StartPage/jucer_NewProjectWizard.cpp";
sourceTree = "SOURCE_ROOT";
};
C3BB9F92B02B06D04A73794C = {
@@ -2354,6 +2281,13 @@
path = "../../Source/Project/UI/Sidebar/jucer_ProjectTreeItemBase.h";
sourceTree = "SOURCE_ROOT";
};
E4532338917106FA0B61A429 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.cpp;
name = "jucer_NewFileWizard.cpp";
path = "../../Source/Utility/Helpers/jucer_NewFileWizard.cpp";
sourceTree = "SOURCE_ROOT";
};
E468FDB5504C5D9315B2D04F = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -2571,6 +2505,13 @@
path = "../../Source/ComponentEditor/Properties/jucer_ComponentColourProperty.h";
sourceTree = "SOURCE_ROOT";
};
FD7885911A317D73E98D49B3 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
name = "jucer_NewProjectWizard.h";
path = "../../Source/Application/StartPage/jucer_NewProjectWizard.h";
sourceTree = "SOURCE_ROOT";
};
FDABEE6B64546586368A4729 = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h;
@@ -2606,6 +2547,20 @@
path = "../../Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp";
sourceTree = "SOURCE_ROOT";
};
A734ACA659C8B85D24B27673 = {
isa = PBXGroup;
children = (
AAF90697C0F171EFC3984A5D,
1F0E279DB49BBF49D81C6D0D,
C2835F16963B34839FC36220,
FD7885911A317D73E98D49B3,
82C18723A3D0E39BBD8F0F6E,
1D7D2E563E8491643C9F2748,
497E1F5F0894B87461734963,
);
name = StartPage;
sourceTree = "<group>";
};
9D43579A76E23FBCE6B36333 = {
isa = PBXGroup;
children = (
@@ -2635,6 +2590,7 @@
BC67FD952A6F210A11A1ECB8 = {
isa = PBXGroup;
children = (
A734ACA659C8B85D24B27673,
9D43579A76E23FBCE6B36333,
EB1D55A76652399EB81CC1F0,
7CA44FF0BA319517C6E39651,
@@ -2712,7 +2668,6 @@
32C4B61AD995877956B7FA66,
A66F17E7472E5C19AFE98E46,
F159C1B99ACF1D91E12D978E,
97A847B59EE04483E8850E4B,
A160AEF56553A658E6EA6A8E,
8336A43CE1C3C26D7C7B53D8,
C7245390C6C44E89F7526CFC,
@@ -3028,10 +2983,12 @@
E186BC01A1B1529937A46485,
486E8D02DAD2A0BF54A901C0,
983CFBA01CA8811F30FA7F4C,
E4532338917106FA0B61A429,
52E30AD23A8BE69D5766AF6D,
58F1FF52E887887A93E84FC2,
A6C4AE13FB409DE414094CFA,
6FD8DBC0FF42C87D8BEE2452,
00515BA4EC5A7D4DC078ED37,
234251407CD1A499D8A816BB,
FF3A6A384D536E1AEF47CD54,
C16F9F479A3A5F6DAD7647A2,
);
@@ -3085,30 +3042,6 @@
name = Utility;
sourceTree = "<group>";
};
73BAA89A783BBDD79AA27964 = {
isa = PBXGroup;
children = (
A69024A225F2AC31F17B1314,
11DC04468BC6023671017EBF,
087CB3A961CD3C7434D660A4,
4B083E951ECB62217C46CB01,
C2990A8D054BC230E7C637C3,
8BD8E9DA627D6EF9BA10FB9E,
3C95FA2AA91EBA19ADDD5C29,
8A825FDDC00DD253F44D2C3A,
4A4EBDAD8D098F72CE053235,
0F01067432AC314EAC213C1C,
A44A774EFC020D3D046A9249,
9992E6950C64322A11E39ADF,
05D67B5A8D64947C067C0945,
A085174413736ACC8D7D42A2,
471C7B0A8B92320AF0C80839,
714267352CE5C4357ADBC231,
C09BBB58CA45B66D693E8C31,
);
name = Wizards;
sourceTree = "<group>";
};
D3109994DA6AD871BE85C4E2 = {
isa = PBXGroup;
children = (
@@ -3121,7 +3054,6 @@
4DCC5D64BBE8DE85360A3D57,
EC535A977A1A114BC5DAE7B3,
2B1F885AA027E1A76A1C32E3,
73BAA89A783BBDD79AA27964,
);
name = Projucer;
sourceTree = "<group>";
@@ -3468,6 +3400,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0A89E8E0E99C3B5B2B38F2E6,
908B7D4FB180F53405DA8EF9,
6DD9DA1677A6CF789CDAB478,
954A036F5DDB375DB23FFB3E,
95B44E6C74B1DED31DBE37EB,
@@ -3511,14 +3445,13 @@
8BE478303CDF061B72F219E2,
BF913199032B4CE970E82AA3,
25EF9B3FECB4C9F0F522DCAA,
4581B3A9A0D92FC01D4149EF,
44AD0D81A65C5EAE3BE588FD,
638C7247B6DBA67EFE46E124,
D0E26EB54B0087C8BE3D541E,
468548FB21D264DC12321327,
6ECB2F11D2F593FACCCF99DB,
95F56FB44C669F93AE77E465,
518DD443B6F17A5AFD707263,
B7EBA1A83575F48CD08140B9,
3C5267E06A897B0DC0F7EA50,
4C743A3DA8682EEE89BDBD28,
5DD883699B85E4C492CAD065,


+ 10
- 21
extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj View File

@@ -140,6 +140,8 @@
<Lib/>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.cpp"/>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.cpp"/>
<ClCompile Include="..\..\Source\Application\jucer_Application.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -171,9 +173,6 @@
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_NoWindow.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_SimpleWindow.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_Window.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -228,14 +227,13 @@
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_CodeHelpers.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_FileHelpers.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.cpp"/>
<ClCompile Include="..\..\Source\Utility\PIPs\jucer_PIPGenerator.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_Icons.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_JucerTreeViewBase.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_ProjucerLookAndFeel.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.cpp"/>
<ClCompile Include="..\..\Source\Wizards\jucer_NewFileWizard.cpp"/>
<ClCompile Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.cpp"/>
<ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -1486,6 +1484,11 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_extra.cpp"/>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_ContentComponents.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectTemplates.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h"/>
@@ -1645,10 +1648,11 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_Colours.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_FileHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_RelativePath.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_TranslationHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueSourceHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueWithDefaultWrapper.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.h"/>
<ClInclude Include="..\..\Source\Utility\PIPs\jucer_PIPGenerator.h"/>
<ClInclude Include="..\..\Source\Utility\UI\PropertyComponents\jucer_ColourPropertyComponent.h"/>
@@ -1660,21 +1664,6 @@
<ClInclude Include="..\..\Source\Utility\UI\jucer_JucerTreeViewBase.h"/>
<ClInclude Include="..\..\Source\Utility\UI\jucer_ProjucerLookAndFeel.h"/>
<ClInclude Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewFileWizard.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Animated.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioApp.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioPlugin.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Blank.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Console.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_DLL.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_GUIApp.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_openGL.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_StaticLibrary.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_TemplateThumbnailsComponent.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"/>


+ 32
- 59
extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters View File

@@ -2,6 +2,9 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Projucer\Application\StartPage">
<UniqueIdentifier>{1E1D2D75-0ADA-6E9E-105F-2F87632B55AF}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\UserAccount">
<UniqueIdentifier>{DA27985D-8427-CE70-CA06-EAF7009CCC60}</UniqueIdentifier>
</Filter>
@@ -83,9 +86,6 @@
<Filter Include="Projucer\Utility">
<UniqueIdentifier>{F77CA057-8DE4-E076-7EB6-D2646794864B}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Wizards">
<UniqueIdentifier>{4BBA3556-B2A1-3008-8BE1-F82DE6666552}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer">
<UniqueIdentifier>{7DBEF27C-2AFE-DA02-1DBF-E80FAAC99EA7}</UniqueIdentifier>
</Filter>
@@ -316,6 +316,12 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.cpp">
<Filter>Projucer\Application\StartPage</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.cpp">
<Filter>Projucer\Application\StartPage</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Application\jucer_Application.cpp">
<Filter>Projucer\Application</Filter>
</ClCompile>
@@ -355,9 +361,6 @@
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_NoWindow.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_SimpleWindow.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_Window.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
@@ -490,6 +493,9 @@
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
@@ -508,12 +514,6 @@
<ClCompile Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.cpp">
<Filter>Projucer\Utility\UI</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Wizards\jucer_NewFileWizard.cpp">
<Filter>Projucer\Wizards</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.cpp">
<Filter>Projucer\Wizards</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp">
<Filter>JUCE Modules\juce_build_tools\utils</Filter>
</ClCompile>
@@ -1866,6 +1866,21 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_ContentComponents.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectTemplates.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
@@ -2343,10 +2358,10 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h">
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_RelativePath.h">
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_TranslationHelpers.h">
@@ -2355,6 +2370,9 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueSourceHelpers.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueWithDefaultWrapper.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
@@ -2388,51 +2406,6 @@
<ClInclude Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.h">
<Filter>Projucer\Utility\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewFileWizard.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizard.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Animated.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioApp.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioPlugin.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Blank.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Console.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_DLL.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_GUIApp.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_openGL.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_StaticLibrary.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_StartPageComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_TemplateThumbnailsComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h">
<Filter>JUCE Modules\juce_build_tools\utils</Filter>
</ClInclude>


+ 10
- 21
extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj View File

@@ -140,6 +140,8 @@
<Lib/>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.cpp"/>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.cpp"/>
<ClCompile Include="..\..\Source\Application\jucer_Application.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -171,9 +173,6 @@
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_NoWindow.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_SimpleWindow.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_Window.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -228,14 +227,13 @@
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_CodeHelpers.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_FileHelpers.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.cpp"/>
<ClCompile Include="..\..\Source\Utility\PIPs\jucer_PIPGenerator.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_Icons.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_JucerTreeViewBase.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_ProjucerLookAndFeel.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.cpp"/>
<ClCompile Include="..\..\Source\Wizards\jucer_NewFileWizard.cpp"/>
<ClCompile Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.cpp"/>
<ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -1486,6 +1484,11 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_extra.cpp"/>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_ContentComponents.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectTemplates.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h"/>
@@ -1645,10 +1648,11 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_Colours.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_FileHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_RelativePath.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_TranslationHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueSourceHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueWithDefaultWrapper.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.h"/>
<ClInclude Include="..\..\Source\Utility\PIPs\jucer_PIPGenerator.h"/>
<ClInclude Include="..\..\Source\Utility\UI\PropertyComponents\jucer_ColourPropertyComponent.h"/>
@@ -1660,21 +1664,6 @@
<ClInclude Include="..\..\Source\Utility\UI\jucer_JucerTreeViewBase.h"/>
<ClInclude Include="..\..\Source\Utility\UI\jucer_ProjucerLookAndFeel.h"/>
<ClInclude Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewFileWizard.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Animated.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioApp.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioPlugin.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Blank.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Console.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_DLL.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_GUIApp.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_openGL.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_StaticLibrary.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_TemplateThumbnailsComponent.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"/>


+ 32
- 59
extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters View File

@@ -2,6 +2,9 @@
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Projucer\Application\StartPage">
<UniqueIdentifier>{1E1D2D75-0ADA-6E9E-105F-2F87632B55AF}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\UserAccount">
<UniqueIdentifier>{DA27985D-8427-CE70-CA06-EAF7009CCC60}</UniqueIdentifier>
</Filter>
@@ -83,9 +86,6 @@
<Filter Include="Projucer\Utility">
<UniqueIdentifier>{F77CA057-8DE4-E076-7EB6-D2646794864B}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Wizards">
<UniqueIdentifier>{4BBA3556-B2A1-3008-8BE1-F82DE6666552}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer">
<UniqueIdentifier>{7DBEF27C-2AFE-DA02-1DBF-E80FAAC99EA7}</UniqueIdentifier>
</Filter>
@@ -316,6 +316,12 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.cpp">
<Filter>Projucer\Application\StartPage</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.cpp">
<Filter>Projucer\Application\StartPage</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Application\jucer_Application.cpp">
<Filter>Projucer\Application</Filter>
</ClCompile>
@@ -355,9 +361,6 @@
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_NoWindow.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_SimpleWindow.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_Window.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
@@ -490,6 +493,9 @@
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
@@ -508,12 +514,6 @@
<ClCompile Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.cpp">
<Filter>Projucer\Utility\UI</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Wizards\jucer_NewFileWizard.cpp">
<Filter>Projucer\Wizards</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.cpp">
<Filter>Projucer\Wizards</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp">
<Filter>JUCE Modules\juce_build_tools\utils</Filter>
</ClCompile>
@@ -1866,6 +1866,21 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_ContentComponents.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectTemplates.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
@@ -2343,10 +2358,10 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h">
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_RelativePath.h">
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_TranslationHelpers.h">
@@ -2355,6 +2370,9 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueSourceHelpers.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueWithDefaultWrapper.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
@@ -2388,51 +2406,6 @@
<ClInclude Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.h">
<Filter>Projucer\Utility\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewFileWizard.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizard.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Animated.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioApp.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioPlugin.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Blank.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Console.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_DLL.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_GUIApp.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_openGL.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_StaticLibrary.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_StartPageComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_TemplateThumbnailsComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h">
<Filter>JUCE Modules\juce_build_tools\utils</Filter>
</ClInclude>


+ 10
- 21
extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj View File

@@ -140,6 +140,8 @@
<Lib/>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.cpp"/>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.cpp"/>
<ClCompile Include="..\..\Source\Application\jucer_Application.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -171,9 +173,6 @@
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_NoWindow.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_SimpleWindow.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_Window.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -228,14 +227,13 @@
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_CodeHelpers.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_FileHelpers.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.cpp"/>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.cpp"/>
<ClCompile Include="..\..\Source\Utility\PIPs\jucer_PIPGenerator.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_Icons.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_JucerTreeViewBase.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_ProjucerLookAndFeel.cpp"/>
<ClCompile Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.cpp"/>
<ClCompile Include="..\..\Source\Wizards\jucer_NewFileWizard.cpp"/>
<ClCompile Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.cpp"/>
<ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
@@ -1486,6 +1484,11 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_extra.cpp"/>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_ContentComponents.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectTemplates.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseQueryThread.h"/>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseState.h"/>
@@ -1645,10 +1648,11 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_Colours.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_FileHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_RelativePath.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_TranslationHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueSourceHelpers.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueWithDefaultWrapper.h"/>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.h"/>
<ClInclude Include="..\..\Source\Utility\PIPs\jucer_PIPGenerator.h"/>
<ClInclude Include="..\..\Source\Utility\UI\PropertyComponents\jucer_ColourPropertyComponent.h"/>
@@ -1660,21 +1664,6 @@
<ClInclude Include="..\..\Source\Utility\UI\jucer_JucerTreeViewBase.h"/>
<ClInclude Include="..\..\Source\Utility\UI\jucer_ProjucerLookAndFeel.h"/>
<ClInclude Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewFileWizard.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizard.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Animated.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioApp.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioPlugin.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Blank.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Console.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_DLL.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_GUIApp.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_openGL.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_StaticLibrary.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_StartPageComponent.h"/>
<ClInclude Include="..\..\Source\Wizards\jucer_TemplateThumbnailsComponent.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"/>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"/>


+ 32
- 59
extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters View File

@@ -2,6 +2,9 @@
<Project ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Projucer\Application\StartPage">
<UniqueIdentifier>{1E1D2D75-0ADA-6E9E-105F-2F87632B55AF}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Application\UserAccount">
<UniqueIdentifier>{DA27985D-8427-CE70-CA06-EAF7009CCC60}</UniqueIdentifier>
</Filter>
@@ -83,9 +86,6 @@
<Filter Include="Projucer\Utility">
<UniqueIdentifier>{F77CA057-8DE4-E076-7EB6-D2646794864B}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer\Wizards">
<UniqueIdentifier>{4BBA3556-B2A1-3008-8BE1-F82DE6666552}</UniqueIdentifier>
</Filter>
<Filter Include="Projucer">
<UniqueIdentifier>{7DBEF27C-2AFE-DA02-1DBF-E80FAAC99EA7}</UniqueIdentifier>
</Filter>
@@ -316,6 +316,12 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.cpp">
<Filter>Projucer\Application\StartPage</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.cpp">
<Filter>Projucer\Application\StartPage</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Application\jucer_Application.cpp">
<Filter>Projucer\Application</Filter>
</ClCompile>
@@ -355,9 +361,6 @@
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_NoWindow.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_SimpleWindow.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\BinaryData\Templates\jucer_MainTemplate_Window.cpp">
<Filter>Projucer\BinaryData\Templates</Filter>
</ClCompile>
@@ -490,6 +493,9 @@
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.cpp">
<Filter>Projucer\Utility\Helpers</Filter>
</ClCompile>
@@ -508,12 +514,6 @@
<ClCompile Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.cpp">
<Filter>Projucer\Utility\UI</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Wizards\jucer_NewFileWizard.cpp">
<Filter>Projucer\Wizards</Filter>
</ClCompile>
<ClCompile Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.cpp">
<Filter>Projucer\Wizards</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp">
<Filter>JUCE Modules\juce_build_tools\utils</Filter>
</ClCompile>
@@ -1866,6 +1866,21 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_ContentComponents.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectTemplates.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_NewProjectWizard.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageComponent.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\StartPage\jucer_StartPageTreeHolder.h">
<Filter>Projucer\Application\StartPage</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Application\UserAccount\jucer_LicenseController.h">
<Filter>Projucer\Application\UserAccount</Filter>
</ClInclude>
@@ -2343,10 +2358,10 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_MiscUtilities.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h">
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_NewFileWizard.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_RelativePath.h">
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_PresetIDs.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_TranslationHelpers.h">
@@ -2355,6 +2370,9 @@
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueSourceHelpers.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_ValueWithDefaultWrapper.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Utility\Helpers\jucer_VersionInfo.h">
<Filter>Projucer\Utility\Helpers</Filter>
</ClInclude>
@@ -2388,51 +2406,6 @@
<ClInclude Include="..\..\Source\Utility\UI\jucer_SlidingPanelComponent.h">
<Filter>Projucer\Utility\UI</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewFileWizard.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizard.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardClasses.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_NewProjectWizardComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Animated.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioApp.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_AudioPlugin.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Blank.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_Console.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_DLL.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_GUIApp.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_openGL.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_ProjectWizard_StaticLibrary.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_StartPageComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\Source\Wizards\jucer_TemplateThumbnailsComponent.h">
<Filter>Projucer\Wizards</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h">
<Filter>JUCE Modules\juce_build_tools\utils</Filter>
</ClInclude>


+ 4
- 4
extras/Projucer/CMakeLists.txt View File

@@ -32,6 +32,8 @@ target_sources(Projucer PRIVATE
Source/Application/jucer_CommandLine.cpp
Source/Application/jucer_Main.cpp
Source/Application/jucer_MainWindow.cpp
Source/Application/StartPage/jucer_StartPageComponent.cpp
Source/Application/StartPage/jucer_NewProjectWizard.cpp
Source/CodeEditor/jucer_DocumentEditorComponent.cpp
Source/CodeEditor/jucer_OpenDocumentManager.cpp
Source/CodeEditor/jucer_SourceCodeEditor.cpp
@@ -71,14 +73,13 @@ target_sources(Projucer PRIVATE
Source/Utility/Helpers/jucer_CodeHelpers.cpp
Source/Utility/Helpers/jucer_FileHelpers.cpp
Source/Utility/Helpers/jucer_MiscUtilities.cpp
Source/Utility/Helpers/jucer_NewFileWizard.cpp
Source/Utility/Helpers/jucer_VersionInfo.cpp
Source/Utility/PIPs/jucer_PIPGenerator.cpp
Source/Utility/UI/jucer_Icons.cpp
Source/Utility/UI/jucer_JucerTreeViewBase.cpp
Source/Utility/UI/jucer_ProjucerLookAndFeel.cpp
Source/Utility/UI/jucer_SlidingPanelComponent.cpp
Source/Wizards/jucer_NewFileWizard.cpp
Source/Wizards/jucer_NewProjectWizardClasses.cpp)
Source/Utility/UI/jucer_SlidingPanelComponent.cpp)

target_compile_definitions(Projucer PRIVATE
JUCE_ALLOW_STATIC_NULL_VARIABLES=0
@@ -127,7 +128,6 @@ juce_add_binary_data(ProjucerData SOURCES
Source/BinaryData/Templates/jucer_InlineComponentTemplate.h
Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp
Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp
Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp
Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp
Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp
Source/BinaryData/Templates/jucer_NewComponentTemplate.h


+ 74
- 186
extras/Projucer/JuceLibraryCode/BinaryData.cpp View File

@@ -5762,7 +5762,7 @@ static const unsigned char temp_binary_data_30[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::AnimatedAppComponent\r\n"
"class %%content_component_class%% : public juce::AnimatedAppComponent\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
@@ -5774,7 +5774,7 @@ static const unsigned char temp_binary_data_30[] =
" setFramesPerSecond (60); // This sets the frequency of the update calls.\r\n"
" }\r\n"
"\r\n"
" ~%%content_component_class%%()\r\n"
" ~%%content_component_class%%() override\r\n"
" {\r\n"
" }\r\n"
"\r\n"
@@ -5865,12 +5865,12 @@ static const unsigned char temp_binary_data_32[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::AnimatedAppComponent\r\n"
"class %%content_component_class%% : public juce::AnimatedAppComponent\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
" %%content_component_class%%();\r\n"
" ~%%content_component_class%%();\r\n"
" ~%%content_component_class%%() override;\r\n"
"\r\n"
" //==============================================================================\r\n"
" void update() override;\r\n"
@@ -5900,7 +5900,7 @@ static const unsigned char temp_binary_data_33[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::AudioAppComponent\r\n"
"class %%content_component_class%% : public juce::AudioAppComponent\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
@@ -6079,7 +6079,7 @@ static const unsigned char temp_binary_data_35[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::AudioAppComponent\r\n"
"class %%content_component_class%% : public juce::AudioAppComponent\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
@@ -6119,7 +6119,7 @@ static const unsigned char temp_binary_data_36[] =
"\r\n"
"//==============================================================================\r\n"
"%%editor_class_name%%::%%editor_class_name%% (%%filter_class_name%%& p)\r\n"
" : AudioProcessorEditor (&p), processor (p)\r\n"
" : AudioProcessorEditor (&p), audioProcessor (p)\r\n"
"{\r\n"
" // Make sure that before the constructor has finished, you've set the\r\n"
" // editor's size to whatever you need it to be.\r\n"
@@ -6170,7 +6170,7 @@ static const unsigned char temp_binary_data_37[] =
"{\r\n"
"public:\r\n"
" %%editor_class_name%% (%%filter_class_name%%&);\r\n"
" ~%%editor_class_name%%();\r\n"
" ~%%editor_class_name%%() override;\r\n"
"\r\n"
" //==============================================================================\r\n"
" void paint (juce::Graphics&) override;\r\n"
@@ -6179,7 +6179,7 @@ static const unsigned char temp_binary_data_37[] =
"private:\r\n"
" // This reference is provided as a quick way for your editor to\r\n"
" // access the processor object that created it.\r\n"
" %%filter_class_name%%& processor;\r\n"
" %%filter_class_name%%& audioProcessor;\r\n"
"\r\n"
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%editor_class_name%%)\r\n"
"};\r\n";
@@ -6401,7 +6401,7 @@ static const unsigned char temp_binary_data_39[] =
"public:\r\n"
" //==============================================================================\r\n"
" %%filter_class_name%%();\r\n"
" ~%%filter_class_name%%();\r\n"
" ~%%filter_class_name%%() override;\r\n"
"\r\n"
" //==============================================================================\r\n"
" void prepareToPlay (double sampleRate, int samplesPerBlock) override;\r\n"
@@ -6599,7 +6599,7 @@ static const unsigned char temp_binary_data_42[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::Component\r\n"
"class %%content_component_class%% : public juce::Component\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
@@ -6608,7 +6608,7 @@ static const unsigned char temp_binary_data_42[] =
" setSize (600, 400);\r\n"
" }\r\n"
"\r\n"
" ~%%content_component_class%%()\r\n"
" ~%%content_component_class%%() override\r\n"
" {\r\n"
" }\r\n"
"\r\n"
@@ -6686,12 +6686,12 @@ static const unsigned char temp_binary_data_44[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::Component\r\n"
"class %%content_component_class%% : public juce::Component\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
" %%content_component_class%%();\r\n"
" ~%%content_component_class%%();\r\n"
" ~%%content_component_class%%() override;\r\n"
"\r\n"
" //==============================================================================\r\n"
" void paint (juce::Graphics&) override;\r\n"
@@ -6710,7 +6710,7 @@ const char* jucer_ContentCompTemplate_h = (const char*) temp_binary_data_44;
//================== jucer_InlineComponentTemplate.h ==================
static const unsigned char temp_binary_data_45[] =
"//==============================================================================\r\n"
"class %%component_class%% : public juce::Component\r\n"
"class %%component_class%% : public juce::Component\r\n"
"{\r\n"
"public:\r\n"
" %%component_class%%()\r\n"
@@ -6720,7 +6720,7 @@ static const unsigned char temp_binary_data_45[] =
"\r\n"
" }\r\n"
"\r\n"
" ~%%component_class%%()\r\n"
" ~%%component_class%%() override\r\n"
" {\r\n"
" }\r\n"
"\r\n"
@@ -6797,7 +6797,7 @@ static const unsigned char temp_binary_data_47[] =
"\r\n"
" const juce::String getApplicationName() override { return ProjectInfo::projectName; }\r\n"
" const juce::String getApplicationVersion() override { return ProjectInfo::versionString; }\r\n"
" bool moreThanOneInstanceAllowed() override { return %%allow_more_than_one_instance%%; }\r\n"
" bool moreThanOneInstanceAllowed() override { return true; }\r\n"
"\r\n"
" //==============================================================================\r\n"
" void initialise (const juce::String& commandLine) override\r\n"
@@ -6832,117 +6832,8 @@ static const unsigned char temp_binary_data_47[] =
const char* jucer_MainTemplate_NoWindow_cpp = (const char*) temp_binary_data_47;
//================== jucer_MainTemplate_SimpleWindow.cpp ==================
static const unsigned char temp_binary_data_48[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
" This file contains the basic startup code for a JUCE application.\r\n"
"\r\n"
" ==============================================================================\r\n"
"*/\r\n"
"\r\n"
"%%app_headers%%\r\n"
"\r\n"
"//==============================================================================\r\n"
"class %%app_class_name%% : public juce::JUCEApplication\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
" %%app_class_name%%() {}\r\n"
"\r\n"
" const juce::String getApplicationName() override { return ProjectInfo::projectName; }\r\n"
" const juce::String getApplicationVersion() override { return ProjectInfo::versionString; }\r\n"
" bool moreThanOneInstanceAllowed() override { return %%allow_more_than_one_instance%%; }\r\n"
"\r\n"
" //==============================================================================\r\n"
" void initialise (const juce::String& commandLine) override\r\n"
" {\r\n"
" // This method is where you should put your application's initialisation code..\r\n"
"\r\n"
" mainWindow.reset (new MainWindow (getApplicationName()));\r\n"
" }\r\n"
"\r\n"
" void shutdown() override\r\n"
" {\r\n"
" // Add your application's shutdown code here..\r\n"
"\r\n"
" mainWindow = nullptr; // (deletes our window)\r\n"
" }\r\n"
"\r\n"
" //==============================================================================\r\n"
" void systemRequestedQuit() override\r\n"
" {\r\n"
" // This is called when the app is being asked to quit: you can ignore this\r\n"
" // request and let the app carry on running, or call quit() to allow the app to close.\r\n"
" quit();\r\n"
" }\r\n"
"\r\n"
" void anotherInstanceStarted (const juce::String& commandLine) override\r\n"
" {\r\n"
" // When another instance of the app is launched while this one is running,\r\n"
" // this method is invoked, and the commandLine parameter tells you what\r\n"
" // the other instance's command-line arguments were.\r\n"
" }\r\n"
"\r\n"
" //==============================================================================\r\n"
" /*\r\n"
" This class implements the desktop window that contains an instance of\r\n"
" our %%content_component_class%% class.\r\n"
" */\r\n"
" class MainWindow : public juce::DocumentWindow\r\n"
" {\r\n"
" public:\r\n"
" MainWindow (juce::String name)\r\n"
" : DocumentWindow (name,\r\n"
" juce::Desktop::getInstance().getDefaultLookAndFeel()\r\n"
" .findColour (juce::ResizableWindow::backgroundColourId),\r\n"
" DocumentWindow::allButtons)\r\n"
" {\r\n"
" setUsingNativeTitleBar (true);\r\n"
" setContentOwned (new %%content_component_class%%(), true);\r\n"
"\r\n"
" #if JUCE_IOS || JUCE_ANDROID\r\n"
" setFullScreen (true);\r\n"
" #else\r\n"
" setResizable (true, true);\r\n"
" centreWithSize (getWidth(), getHeight());\r\n"
" #endif\r\n"
"\r\n"
" setVisible (true);\r\n"
" }\r\n"
"\r\n"
" void closeButtonPressed() override\r\n"
" {\r\n"
" // This is called when the user tries to close this window. Here, we'll just\r\n"
" // ask the app to quit when this happens, but you can change this to do\r\n"
" // whatever you need.\r\n"
" juce::JUCEApplication::getInstance()->systemRequestedQuit();\r\n"
" }\r\n"
"\r\n"
" /* Note: Be careful if you override any DocumentWindow methods - the base\r\n"
" class uses a lot of them, so by overriding you might break its functionality.\r\n"
" It's best to do all your work in your content component instead, but if\r\n"
" you really have to override any DocumentWindow methods, make sure your\r\n"
" subclass also calls the superclass's method.\r\n"
" */\r\n"
"\r\n"
" private:\r\n"
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)\r\n"
" };\r\n"
"\r\n"
"private:\r\n"
" std::unique_ptr<MainWindow> mainWindow;\r\n"
"};\r\n"
"\r\n"
"//==============================================================================\r\n"
"// This macro generates the main() routine that launches the app.\r\n"
"START_JUCE_APPLICATION (%%app_class_name%%)\r\n";
const char* jucer_MainTemplate_SimpleWindow_cpp = (const char*) temp_binary_data_48;
//================== jucer_MainTemplate_Window.cpp ==================
static const unsigned char temp_binary_data_49[] =
static const unsigned char temp_binary_data_48[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -6962,7 +6853,7 @@ static const unsigned char temp_binary_data_49[] =
"\r\n"
" const juce::String getApplicationName() override { return ProjectInfo::projectName; }\r\n"
" const juce::String getApplicationVersion() override { return ProjectInfo::versionString; }\r\n"
" bool moreThanOneInstanceAllowed() override { return %%allow_more_than_one_instance%%; }\r\n"
" bool moreThanOneInstanceAllowed() override { return true; }\r\n"
"\r\n"
" //==============================================================================\r\n"
" void initialise (const juce::String& commandLine) override\r\n"
@@ -7048,10 +6939,10 @@ static const unsigned char temp_binary_data_49[] =
"// This macro generates the main() routine that launches the app.\r\n"
"START_JUCE_APPLICATION (%%app_class_name%%)\r\n";
const char* jucer_MainTemplate_Window_cpp = (const char*) temp_binary_data_49;
const char* jucer_MainTemplate_Window_cpp = (const char*) temp_binary_data_48;
//================== jucer_NewComponentTemplate.cpp ==================
static const unsigned char temp_binary_data_50[] =
static const unsigned char temp_binary_data_49[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7104,10 +6995,10 @@ static const unsigned char temp_binary_data_50[] =
"\r\n"
"}\r\n";
const char* jucer_NewComponentTemplate_cpp = (const char*) temp_binary_data_50;
const char* jucer_NewComponentTemplate_cpp = (const char*) temp_binary_data_49;
//================== jucer_NewComponentTemplate.h ==================
static const unsigned char temp_binary_data_51[] =
static const unsigned char temp_binary_data_50[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7125,11 +7016,11 @@ static const unsigned char temp_binary_data_51[] =
"//==============================================================================\r\n"
"/*\r\n"
"*/\r\n"
"class %%component_class%% : public juce::Component\r\n"
"class %%component_class%% : public juce::Component\r\n"
"{\r\n"
"public:\r\n"
" %%component_class%%();\r\n"
" ~%%component_class%%();\r\n"
" ~%%component_class%%() override;\r\n"
"\r\n"
" void paint (juce::Graphics&) override;\r\n"
" void resized() override;\r\n"
@@ -7138,10 +7029,10 @@ static const unsigned char temp_binary_data_51[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
const char* jucer_NewComponentTemplate_h = (const char*) temp_binary_data_51;
const char* jucer_NewComponentTemplate_h = (const char*) temp_binary_data_50;
//================== jucer_NewCppFileTemplate.cpp ==================
static const unsigned char temp_binary_data_52[] =
static const unsigned char temp_binary_data_51[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7154,10 +7045,10 @@ static const unsigned char temp_binary_data_52[] =
"\r\n"
"%%include_corresponding_header%%\r\n";
const char* jucer_NewCppFileTemplate_cpp = (const char*) temp_binary_data_52;
const char* jucer_NewCppFileTemplate_cpp = (const char*) temp_binary_data_51;
//================== jucer_NewCppFileTemplate.h ==================
static const unsigned char temp_binary_data_53[] =
static const unsigned char temp_binary_data_52[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7170,10 +7061,10 @@ static const unsigned char temp_binary_data_53[] =
"\r\n"
"#pragma once\r\n";
const char* jucer_NewCppFileTemplate_h = (const char*) temp_binary_data_53;
const char* jucer_NewCppFileTemplate_h = (const char*) temp_binary_data_52;
//================== jucer_NewInlineComponentTemplate.h ==================
static const unsigned char temp_binary_data_54[] =
static const unsigned char temp_binary_data_53[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7191,7 +7082,7 @@ static const unsigned char temp_binary_data_54[] =
"//==============================================================================\r\n"
"/*\r\n"
"*/\r\n"
"class %%component_class%% : public juce::Component\r\n"
"class %%component_class%% : public juce::Component\r\n"
"{\r\n"
"public:\r\n"
" %%component_class%%()\r\n"
@@ -7201,7 +7092,7 @@ static const unsigned char temp_binary_data_54[] =
"\r\n"
" }\r\n"
"\r\n"
" ~%%component_class%%()\r\n"
" ~%%component_class%%() override\r\n"
" {\r\n"
" }\r\n"
"\r\n"
@@ -7236,10 +7127,10 @@ static const unsigned char temp_binary_data_54[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
const char* jucer_NewInlineComponentTemplate_h = (const char*) temp_binary_data_54;
const char* jucer_NewInlineComponentTemplate_h = (const char*) temp_binary_data_53;
//================== jucer_OpenGLComponentSimpleTemplate.h ==================
static const unsigned char temp_binary_data_55[] =
static const unsigned char temp_binary_data_54[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -7249,7 +7140,7 @@ static const unsigned char temp_binary_data_55[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::OpenGLAppComponent\r\n"
"class %%content_component_class%% : public juce::OpenGLAppComponent\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
@@ -7260,7 +7151,7 @@ static const unsigned char temp_binary_data_55[] =
" setSize (800, 600);\r\n"
" }\r\n"
"\r\n"
" ~%%content_component_class%%()\r\n"
" ~%%content_component_class%%() override\r\n"
" {\r\n"
" // This shuts down the GL system and stops the rendering calls.\r\n"
" shutdownOpenGL();\r\n"
@@ -7308,10 +7199,10 @@ static const unsigned char temp_binary_data_55[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_OpenGLComponentSimpleTemplate_h = (const char*) temp_binary_data_55;
const char* jucer_OpenGLComponentSimpleTemplate_h = (const char*) temp_binary_data_54;
//================== jucer_OpenGLComponentTemplate.cpp ==================
static const unsigned char temp_binary_data_56[] =
static const unsigned char temp_binary_data_55[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@@ -7361,10 +7252,10 @@ static const unsigned char temp_binary_data_56[] =
" // update their positions.\r\n"
"}\r\n";
const char* jucer_OpenGLComponentTemplate_cpp = (const char*) temp_binary_data_56;
const char* jucer_OpenGLComponentTemplate_cpp = (const char*) temp_binary_data_55;
//================== jucer_OpenGLComponentTemplate.h ==================
static const unsigned char temp_binary_data_57[] =
static const unsigned char temp_binary_data_56[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -7374,12 +7265,12 @@ static const unsigned char temp_binary_data_57[] =
" This component lives inside our window, and this is where you should put all\r\n"
" your controls and content.\r\n"
"*/\r\n"
"class %%content_component_class%% : public juce::OpenGLAppComponent\r\n"
"class %%content_component_class%% : public juce::OpenGLAppComponent\r\n"
"{\r\n"
"public:\r\n"
" //==============================================================================\r\n"
" %%content_component_class%%();\r\n"
" ~%%content_component_class%%();\r\n"
" ~%%content_component_class%%() override;\r\n"
"\r\n"
" //==============================================================================\r\n"
" void initialise() override;\r\n"
@@ -7398,10 +7289,10 @@ static const unsigned char temp_binary_data_57[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
const char* jucer_OpenGLComponentTemplate_h = (const char*) temp_binary_data_57;
const char* jucer_OpenGLComponentTemplate_h = (const char*) temp_binary_data_56;
//================== jucer_PIPAudioProcessorTemplate.h ==================
static const unsigned char temp_binary_data_58[] =
static const unsigned char temp_binary_data_57[] =
"class %%class_name%% : public juce::AudioProcessor\r\n"
"{\r\n"
"public:\r\n"
@@ -7412,7 +7303,7 @@ static const unsigned char temp_binary_data_58[] =
" {\r\n"
" }\r\n"
"\r\n"
" ~%%class_name%%()\r\n"
" ~%%class_name%%() override\r\n"
" {\r\n"
" }\r\n"
"\r\n"
@@ -7510,10 +7401,10 @@ static const unsigned char temp_binary_data_58[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%class_name%%)\r\n"
"};\r\n";
const char* jucer_PIPAudioProcessorTemplate_h = (const char*) temp_binary_data_58;
const char* jucer_PIPAudioProcessorTemplate_h = (const char*) temp_binary_data_57;
//================== jucer_PIPTemplate.h ==================
static const unsigned char temp_binary_data_59[] =
static const unsigned char temp_binary_data_58[] =
"/*******************************************************************************\r\n"
" The block below describes the properties of this PIP. A PIP is a short snippet\r\n"
" of code that can be read by the Projucer and used to generate a JUCE project.\r\n"
@@ -7532,10 +7423,10 @@ static const unsigned char temp_binary_data_59[] =
"//==============================================================================\r\n"
"%%pip_code%%\r\n";
const char* jucer_PIPTemplate_h = (const char*) temp_binary_data_59;
const char* jucer_PIPTemplate_h = (const char*) temp_binary_data_58;
//================== colourscheme_dark.xml ==================
static const unsigned char temp_binary_data_60[] =
static const unsigned char temp_binary_data_59[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
"\r\n"
"<COLOUR_SCHEME font=\"&lt;Monospaced&gt;; 13.0\">\r\n"
@@ -7560,10 +7451,10 @@ static const unsigned char temp_binary_data_60[] =
" <COLOUR name=\"Error\" colour=\"FFE60000\"/>\r\n"
"</COLOUR_SCHEME>\r\n";
const char* colourscheme_dark_xml = (const char*) temp_binary_data_60;
const char* colourscheme_dark_xml = (const char*) temp_binary_data_59;
//================== colourscheme_light.xml ==================
static const unsigned char temp_binary_data_61[] =
static const unsigned char temp_binary_data_60[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
"\r\n"
"<COLOUR_SCHEME font=\"&lt;Monospaced&gt;; 13.0\">\r\n"
@@ -7588,16 +7479,16 @@ static const unsigned char temp_binary_data_61[] =
" <COLOUR name=\"Error\" colour=\"ffcc0000\"/>\r\n"
"</COLOUR_SCHEME>\r\n";
const char* colourscheme_light_xml = (const char*) temp_binary_data_61;
const char* colourscheme_light_xml = (const char*) temp_binary_data_60;
//================== nothingtoseehere.txt ==================
static const unsigned char temp_binary_data_62[] =
static const unsigned char temp_binary_data_61[] =
"VUEtMTk3NTkzMTgtNA==";
const char* nothingtoseehere_txt = (const char*) temp_binary_data_62;
const char* nothingtoseehere_txt = (const char*) temp_binary_data_61;
//================== projucer_EULA.txt ==================
static const unsigned char temp_binary_data_63[] =
static const unsigned char temp_binary_data_62[] =
"\r\n"
"IMPORTANT NOTICE: PLEASE READ CAREFULLY BEFORE INSTALLING THE SOFTWARE:\r\n"
"\r\n"
@@ -7761,7 +7652,7 @@ static const unsigned char temp_binary_data_63[] =
"\r\n"
"10.6. Please note that this License, its subject matter and its formation, are governed by English law. You and we both agree to that the courts of England and Wales will have exclusive jurisdiction.\r\n";
const char* projucer_EULA_txt = (const char*) temp_binary_data_63;
const char* projucer_EULA_txt = (const char*) temp_binary_data_62;
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
@@ -7804,35 +7695,34 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
case 0x52a8dfdf: numBytes = 1859; return wizard_Openfile_svg;
case 0x58e2ae48: numBytes = 4551; return wizard_OpenGL_svg;
case 0xb1da6f9e: numBytes = 7488; return wizard_StaticLibrary_svg;
case 0xd11e6d35: numBytes = 1890; return jucer_AnimatedComponentSimpleTemplate_h;
case 0xd11e6d35: numBytes = 1898; return jucer_AnimatedComponentSimpleTemplate_h;
case 0x6cf2645e: numBytes = 1362; return jucer_AnimatedComponentTemplate_cpp;
case 0x97b055e3: numBytes = 1000; return jucer_AnimatedComponentTemplate_h;
case 0xfb6f6d96: numBytes = 3555; return jucer_AudioComponentSimpleTemplate_h;
case 0x97b055e3: numBytes = 1008; return jucer_AnimatedComponentTemplate_h;
case 0xfb6f6d96: numBytes = 3554; return jucer_AudioComponentSimpleTemplate_h;
case 0xafccbd3f: numBytes = 2941; return jucer_AudioComponentTemplate_cpp;
case 0x915d7304: numBytes = 1188; return jucer_AudioComponentTemplate_h;
case 0x27c5a93a: numBytes = 1350; return jucer_AudioPluginEditorTemplate_cpp;
case 0x4d0721bf: numBytes = 959; return jucer_AudioPluginEditorTemplate_h;
case 0x915d7304: numBytes = 1187; return jucer_AudioComponentTemplate_h;
case 0x27c5a93a: numBytes = 1355; return jucer_AudioPluginEditorTemplate_cpp;
case 0x4d0721bf: numBytes = 973; return jucer_AudioPluginEditorTemplate_h;
case 0x51b49ac5: numBytes = 6090; return jucer_AudioPluginFilterTemplate_cpp;
case 0x488afa0a: numBytes = 2290; return jucer_AudioPluginFilterTemplate_h;
case 0x488afa0a: numBytes = 2299; return jucer_AudioPluginFilterTemplate_h;
case 0xabad7041: numBytes = 2147; return jucer_ComponentTemplate_cpp;
case 0xfc72fe86: numBytes = 2065; return jucer_ComponentTemplate_h;
case 0x1657b643: numBytes = 1516; return jucer_ContentCompSimpleTemplate_h;
case 0x1657b643: numBytes = 1524; return jucer_ContentCompSimpleTemplate_h;
case 0x0b66646c: numBytes = 1007; return jucer_ContentCompTemplate_cpp;
case 0x6fa10171: numBytes = 870; return jucer_ContentCompTemplate_h;
case 0x28d496ad: numBytes = 1269; return jucer_InlineComponentTemplate_h;
case 0x6fa10171: numBytes = 878; return jucer_ContentCompTemplate_h;
case 0x28d496ad: numBytes = 1276; return jucer_InlineComponentTemplate_h;
case 0x8905395b: numBytes = 443; return jucer_MainConsoleAppTemplate_cpp;
case 0x5e5ea047: numBytes = 2027; return jucer_MainTemplate_NoWindow_cpp;
case 0xda2391f8: numBytes = 4115; return jucer_MainTemplate_SimpleWindow_cpp;
case 0x400bc026: numBytes = 4109; return jucer_MainTemplate_Window_cpp;
case 0x5e5ea047: numBytes = 1999; return jucer_MainTemplate_NoWindow_cpp;
case 0x400bc026: numBytes = 4081; return jucer_MainTemplate_Window_cpp;
case 0xf4842835: numBytes = 1521; return jucer_NewComponentTemplate_cpp;
case 0xe7bf237a: numBytes = 658; return jucer_NewComponentTemplate_h;
case 0xe7bf237a: numBytes = 665; return jucer_NewComponentTemplate_h;
case 0x02a2a077: numBytes = 278; return jucer_NewCppFileTemplate_cpp;
case 0x0842c43c: numBytes = 258; return jucer_NewCppFileTemplate_h;
case 0x36e634a1: numBytes = 1712; return jucer_NewInlineComponentTemplate_h;
case 0x6bdeb129: numBytes = 1979; return jucer_OpenGLComponentSimpleTemplate_h;
case 0x36e634a1: numBytes = 1719; return jucer_NewInlineComponentTemplate_h;
case 0x6bdeb129: numBytes = 1987; return jucer_OpenGLComponentSimpleTemplate_h;
case 0x7fbac252: numBytes = 1470; return jucer_OpenGLComponentTemplate_cpp;
case 0x491fa0d7: numBytes = 1062; return jucer_OpenGLComponentTemplate_h;
case 0xbc050edc: numBytes = 5046; return jucer_PIPAudioProcessorTemplate_h;
case 0x491fa0d7: numBytes = 1070; return jucer_OpenGLComponentTemplate_h;
case 0xbc050edc: numBytes = 5055; return jucer_PIPAudioProcessorTemplate_h;
case 0x0b16e320: numBytes = 517; return jucer_PIPTemplate_h;
case 0x763d39dc: numBytes = 1050; return colourscheme_dark_xml;
case 0xe8b08520: numBytes = 1050; return colourscheme_light_xml;
@@ -7895,7 +7785,6 @@ const char* namedResourceList[] =
"jucer_InlineComponentTemplate_h",
"jucer_MainConsoleAppTemplate_cpp",
"jucer_MainTemplate_NoWindow_cpp",
"jucer_MainTemplate_SimpleWindow_cpp",
"jucer_MainTemplate_Window_cpp",
"jucer_NewComponentTemplate_cpp",
"jucer_NewComponentTemplate_h",
@@ -7963,7 +7852,6 @@ const char* originalFilenames[] =
"jucer_InlineComponentTemplate.h",
"jucer_MainConsoleAppTemplate.cpp",
"jucer_MainTemplate_NoWindow.cpp",
"jucer_MainTemplate_SimpleWindow.cpp",
"jucer_MainTemplate_Window.cpp",
"jucer_NewComponentTemplate.cpp",
"jucer_NewComponentTemplate.h",


+ 18
- 21
extras/Projucer/JuceLibraryCode/BinaryData.h View File

@@ -99,34 +99,34 @@ namespace BinaryData
const int wizard_StaticLibrary_svgSize = 7488;
extern const char* jucer_AnimatedComponentSimpleTemplate_h;
const int jucer_AnimatedComponentSimpleTemplate_hSize = 1890;
const int jucer_AnimatedComponentSimpleTemplate_hSize = 1898;
extern const char* jucer_AnimatedComponentTemplate_cpp;
const int jucer_AnimatedComponentTemplate_cppSize = 1362;
extern const char* jucer_AnimatedComponentTemplate_h;
const int jucer_AnimatedComponentTemplate_hSize = 1000;
const int jucer_AnimatedComponentTemplate_hSize = 1008;
extern const char* jucer_AudioComponentSimpleTemplate_h;
const int jucer_AudioComponentSimpleTemplate_hSize = 3555;
const int jucer_AudioComponentSimpleTemplate_hSize = 3554;
extern const char* jucer_AudioComponentTemplate_cpp;
const int jucer_AudioComponentTemplate_cppSize = 2941;
extern const char* jucer_AudioComponentTemplate_h;
const int jucer_AudioComponentTemplate_hSize = 1188;
const int jucer_AudioComponentTemplate_hSize = 1187;
extern const char* jucer_AudioPluginEditorTemplate_cpp;
const int jucer_AudioPluginEditorTemplate_cppSize = 1350;
const int jucer_AudioPluginEditorTemplate_cppSize = 1355;
extern const char* jucer_AudioPluginEditorTemplate_h;
const int jucer_AudioPluginEditorTemplate_hSize = 959;
const int jucer_AudioPluginEditorTemplate_hSize = 973;
extern const char* jucer_AudioPluginFilterTemplate_cpp;
const int jucer_AudioPluginFilterTemplate_cppSize = 6090;
extern const char* jucer_AudioPluginFilterTemplate_h;
const int jucer_AudioPluginFilterTemplate_hSize = 2290;
const int jucer_AudioPluginFilterTemplate_hSize = 2299;
extern const char* jucer_ComponentTemplate_cpp;
const int jucer_ComponentTemplate_cppSize = 2147;
@@ -135,34 +135,31 @@ namespace BinaryData
const int jucer_ComponentTemplate_hSize = 2065;
extern const char* jucer_ContentCompSimpleTemplate_h;
const int jucer_ContentCompSimpleTemplate_hSize = 1516;
const int jucer_ContentCompSimpleTemplate_hSize = 1524;
extern const char* jucer_ContentCompTemplate_cpp;
const int jucer_ContentCompTemplate_cppSize = 1007;
extern const char* jucer_ContentCompTemplate_h;
const int jucer_ContentCompTemplate_hSize = 870;
const int jucer_ContentCompTemplate_hSize = 878;
extern const char* jucer_InlineComponentTemplate_h;
const int jucer_InlineComponentTemplate_hSize = 1269;
const int jucer_InlineComponentTemplate_hSize = 1276;
extern const char* jucer_MainConsoleAppTemplate_cpp;
const int jucer_MainConsoleAppTemplate_cppSize = 443;
extern const char* jucer_MainTemplate_NoWindow_cpp;
const int jucer_MainTemplate_NoWindow_cppSize = 2027;
extern const char* jucer_MainTemplate_SimpleWindow_cpp;
const int jucer_MainTemplate_SimpleWindow_cppSize = 4115;
const int jucer_MainTemplate_NoWindow_cppSize = 1999;
extern const char* jucer_MainTemplate_Window_cpp;
const int jucer_MainTemplate_Window_cppSize = 4109;
const int jucer_MainTemplate_Window_cppSize = 4081;
extern const char* jucer_NewComponentTemplate_cpp;
const int jucer_NewComponentTemplate_cppSize = 1521;
extern const char* jucer_NewComponentTemplate_h;
const int jucer_NewComponentTemplate_hSize = 658;
const int jucer_NewComponentTemplate_hSize = 665;
extern const char* jucer_NewCppFileTemplate_cpp;
const int jucer_NewCppFileTemplate_cppSize = 278;
@@ -171,19 +168,19 @@ namespace BinaryData
const int jucer_NewCppFileTemplate_hSize = 258;
extern const char* jucer_NewInlineComponentTemplate_h;
const int jucer_NewInlineComponentTemplate_hSize = 1712;
const int jucer_NewInlineComponentTemplate_hSize = 1719;
extern const char* jucer_OpenGLComponentSimpleTemplate_h;
const int jucer_OpenGLComponentSimpleTemplate_hSize = 1979;
const int jucer_OpenGLComponentSimpleTemplate_hSize = 1987;
extern const char* jucer_OpenGLComponentTemplate_cpp;
const int jucer_OpenGLComponentTemplate_cppSize = 1470;
extern const char* jucer_OpenGLComponentTemplate_h;
const int jucer_OpenGLComponentTemplate_hSize = 1062;
const int jucer_OpenGLComponentTemplate_hSize = 1070;
extern const char* jucer_PIPAudioProcessorTemplate_h;
const int jucer_PIPAudioProcessorTemplate_hSize = 5046;
const int jucer_PIPAudioProcessorTemplate_hSize = 5055;
extern const char* jucer_PIPTemplate_h;
const int jucer_PIPTemplate_hSize = 517;
@@ -201,7 +198,7 @@ namespace BinaryData
const int projucer_EULA_txtSize = 14361;
// Number of elements in the namedResourceList and originalFileNames arrays.
const int namedResourceListSize = 64;
const int namedResourceListSize = 63;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];


+ 24
- 42
extras/Projucer/Projucer.jucer View File

@@ -3,8 +3,8 @@
<JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce"
jucerVersion="6.0.0" version="6.0.0" bundleIdentifier="com.juce.theprojucer"
splashScreenColour="Dark" displaySplashScreen="0" reportAppUsage="0"
companyName="Raw Material Software Limited" companyCopyright="Raw Material Software Limited" cppLanguageStandard="11"
useAppConfig="0" addUsingNamespaceToJuceHeader="1">
companyName="Raw Material Software Limited" companyCopyright="Raw Material Software Limited"
cppLanguageStandard="11" useAppConfig="0" addUsingNamespaceToJuceHeader="1">
<EXPORTFORMATS>
<XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"
documentExtensions=".jucer" objCExtraSuffix="zkVtji" bigIcon="Zrx1Gl"
@@ -101,6 +101,22 @@
</EXPORTFORMATS>
<MAINGROUP name="Projucer" id="NhrJq66R">
<GROUP id="{9E4C4E0D-7BAB-EB6F-87DA-FB264EC2AE68}" name="Application">
<GROUP id="{2F6B47CF-F27B-0D18-331F-533DE3F89310}" name="StartPage">
<FILE id="PewFno" name="jucer_ContentComponents.h" compile="0" resource="0"
file="Source/Application/StartPage/jucer_ContentComponents.h"/>
<FILE id="ApAD9d" name="jucer_NewProjectTemplates.h" compile="0" resource="0"
file="Source/Application/StartPage/jucer_NewProjectTemplates.h"/>
<FILE id="t8pBCG" name="jucer_NewProjectWizard.cpp" compile="1" resource="0"
file="Source/Application/StartPage/jucer_NewProjectWizard.cpp"/>
<FILE id="eoPkbr" name="jucer_NewProjectWizard.h" compile="0" resource="0"
file="Source/Application/StartPage/jucer_NewProjectWizard.h"/>
<FILE id="OuSOwU" name="jucer_StartPageComponent.cpp" compile="1" resource="0"
file="Source/Application/StartPage/jucer_StartPageComponent.cpp"/>
<FILE id="gLig4M" name="jucer_StartPageComponent.h" compile="0" resource="0"
file="Source/Application/StartPage/jucer_StartPageComponent.h"/>
<FILE id="dsxevB" name="jucer_StartPageTreeHolder.h" compile="0" resource="0"
file="Source/Application/StartPage/jucer_StartPageTreeHolder.h"/>
</GROUP>
<GROUP id="{70333C48-4F84-A180-24E1-0EC9EF223F3B}" name="UserAccount">
<FILE id="Rw7w0l" name="jucer_LicenseController.h" compile="0" resource="0"
file="Source/Application/UserAccount/jucer_LicenseController.h"/>
@@ -247,8 +263,6 @@
resource="1" file="Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp"/>
<FILE id="IW9dIW" name="jucer_MainTemplate_NoWindow.cpp" compile="0"
resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp"/>
<FILE id="SOsB1w" name="jucer_MainTemplate_SimpleWindow.cpp" compile="0"
resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp"/>
<FILE id="Zx5T5B" name="jucer_MainTemplate_Window.cpp" compile="0"
resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp"/>
<FILE id="jCBXcQ" name="jucer_NewComponentTemplate.cpp" compile="0"
@@ -636,14 +650,18 @@
file="Source/Utility/Helpers/jucer_MiscUtilities.cpp"/>
<FILE id="ilDiWE" name="jucer_MiscUtilities.h" compile="0" resource="0"
file="Source/Utility/Helpers/jucer_MiscUtilities.h"/>
<FILE id="BICStH" name="jucer_NewFileWizard.cpp" compile="1" resource="0"
file="Source/Utility/Helpers/jucer_NewFileWizard.cpp"/>
<FILE id="laRrOn" name="jucer_NewFileWizard.h" compile="0" resource="0"
file="Source/Utility/Helpers/jucer_NewFileWizard.h"/>
<FILE id="rCaPHQ" name="jucer_PresetIDs.h" compile="0" resource="0"
file="Source/Utility/Helpers/jucer_PresetIDs.h"/>
<FILE id="I1mt4g" name="jucer_RelativePath.h" compile="0" resource="0"
file="Source/Utility/Helpers/jucer_RelativePath.h"/>
<FILE id="gOrmP5" name="jucer_TranslationHelpers.h" compile="0" resource="0"
file="Source/Utility/Helpers/jucer_TranslationHelpers.h"/>
<FILE id="EuC4K4" name="jucer_ValueSourceHelpers.h" compile="0" resource="0"
file="Source/Utility/Helpers/jucer_ValueSourceHelpers.h"/>
<FILE id="W5a5Fy" name="jucer_ValueWithDefaultWrapper.h" compile="0"
resource="0" file="Source/Utility/Helpers/jucer_ValueWithDefaultWrapper.h"/>
<FILE id="BPCoKV" name="jucer_VersionInfo.cpp" compile="1" resource="0"
file="Source/Utility/Helpers/jucer_VersionInfo.cpp"/>
<FILE id="TnBQtv" name="jucer_VersionInfo.h" compile="0" resource="0"
@@ -684,42 +702,6 @@
resource="0" file="Source/Utility/UI/jucer_SlidingPanelComponent.h"/>
</GROUP>
</GROUP>
<GROUP id="{ECF14F8E-E605-CFBF-7BAD-2CE0A360EDAA}" name="Wizards">
<FILE id="ICGT7i" name="jucer_NewFileWizard.cpp" compile="1" resource="0"
file="Source/Wizards/jucer_NewFileWizard.cpp"/>
<FILE id="fg6m0u" name="jucer_NewFileWizard.h" compile="0" resource="0"
file="Source/Wizards/jucer_NewFileWizard.h"/>
<FILE id="OA9jot" name="jucer_NewProjectWizard.h" compile="0" resource="0"
file="Source/Wizards/jucer_NewProjectWizard.h"/>
<FILE id="fIFyt2" name="jucer_NewProjectWizardClasses.cpp" compile="1"
resource="0" file="Source/Wizards/jucer_NewProjectWizardClasses.cpp"/>
<FILE id="xSc6Lz" name="jucer_NewProjectWizardClasses.h" compile="0"
resource="0" file="Source/Wizards/jucer_NewProjectWizardClasses.h"/>
<FILE id="k0Y8ph" name="jucer_NewProjectWizardComponent.h" compile="0"
resource="0" file="Source/Wizards/jucer_NewProjectWizardComponent.h"/>
<FILE id="YnByBt" name="jucer_ProjectWizard_Animated.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_Animated.h"/>
<FILE id="n4Mwbm" name="jucer_ProjectWizard_AudioApp.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_AudioApp.h"/>
<FILE id="ItaszP" name="jucer_ProjectWizard_AudioPlugin.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_AudioPlugin.h"/>
<FILE id="t0ntRv" name="jucer_ProjectWizard_Blank.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_Blank.h"/>
<FILE id="dm6mDO" name="jucer_ProjectWizard_Console.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_Console.h"/>
<FILE id="FlLyrJ" name="jucer_ProjectWizard_DLL.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_DLL.h"/>
<FILE id="mzzOny" name="jucer_ProjectWizard_GUIApp.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_GUIApp.h"/>
<FILE id="l7EQOJ" name="jucer_ProjectWizard_openGL.h" compile="0" resource="0"
file="Source/Wizards/jucer_ProjectWizard_openGL.h"/>
<FILE id="qik3Jx" name="jucer_ProjectWizard_StaticLibrary.h" compile="0"
resource="0" file="Source/Wizards/jucer_ProjectWizard_StaticLibrary.h"/>
<FILE id="bMgfxz" name="jucer_StartPageComponent.h" compile="0" resource="0"
file="Source/Wizards/jucer_StartPageComponent.h"/>
<FILE id="aX8eVH" name="jucer_TemplateThumbnailsComponent.h" compile="0"
resource="0" file="Source/Wizards/jucer_TemplateThumbnailsComponent.h"/>
</GROUP>
</MAINGROUP>
<JUCEOPTIONS JUCE_LOG_ASSERTIONS="1" JUCE_USE_CURL="1" JUCE_ALLOW_STATIC_NULL_VARIABLES="0"
JUCE_STRICT_REFCOUNTEDPOINTER="1" JUCE_LOAD_CURL_SYMBOLS_LAZILY="1"


+ 305
- 0
extras/Projucer/Source/Application/StartPage/jucer_ContentComponents.h View File

@@ -0,0 +1,305 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
#include "../../ProjectSaving/jucer_ProjectExporter.h"
#include "../../Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h"
#include "../../Utility/Helpers/jucer_ValueWithDefaultWrapper.h"
#include "jucer_NewProjectWizard.h"
//==============================================================================
class ItemHeader : public Component
{
public:
ItemHeader (StringRef name, StringRef description, const char* iconSvgData)
: nameLabel ({}, name),
descriptionLabel ({}, description),
icon (makeIcon (iconSvgData))
{
addAndMakeVisible (nameLabel);
nameLabel.setFont (18.0f);
nameLabel.setMinimumHorizontalScale (1.0f);
addAndMakeVisible (descriptionLabel);
descriptionLabel.setMinimumHorizontalScale (1.0f);
}
void resized() override
{
auto bounds = getLocalBounds();
auto topSlice = bounds.removeFromTop (50);
iconBounds = topSlice.removeFromRight (75);
nameLabel.setBounds (topSlice);
bounds.removeFromTop (10);
descriptionLabel.setBounds (bounds.removeFromTop (50));
bounds.removeFromTop (20);
}
void paint (Graphics& g) override
{
g.fillAll (findColour (secondaryBackgroundColourId));
if (icon != nullptr)
icon->drawWithin (g, iconBounds.toFloat(), RectanglePlacement::centred, 1.0f);
}
private:
static std::unique_ptr<Drawable> makeIcon (const char* iconSvgData)
{
if (auto svg = XmlDocument::parse (iconSvgData))
return Drawable::createFromSVG (*svg);
return {};
}
Label nameLabel, descriptionLabel;
Rectangle<int> iconBounds;
std::unique_ptr<Drawable> icon;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ItemHeader)
};
//==============================================================================
class TemplateComponent : public Component
{
public:
TemplateComponent (const NewProjectTemplates::ProjectTemplate& temp,
std::function<void(std::unique_ptr<Project>)>&& createdCallback)
: projectTemplate (temp),
projectCreatedCallback (std::move (createdCallback)),
header (projectTemplate.displayName, projectTemplate.description, projectTemplate.icon)
{
createProjectButton.onClick = [this]
{
FileChooser fc ("Save Project", NewProjectWizard::getLastWizardFolder());
if (fc.browseForDirectory())
{
auto dir = fc.getResult();
if (auto project = NewProjectWizard::createNewProject (projectTemplate,
dir.getChildFile (projectNameValue.get().toString()),
projectNameValue.get(),
modulesValue.get(),
exportersValue.get(),
fileOptionsValue.get(),
modulePathValue.getCurrentValue(),
modulePathValue.getWrappedValueWithDefault().isUsingDefault()))
{
projectCreatedCallback (std::move (project));
getAppSettings().lastWizardFolder = dir;
}
}
};
addAndMakeVisible (createProjectButton);
addAndMakeVisible (header);
modulePathValue.init ({ settingsTree, Ids::defaultJuceModulePath, nullptr },
getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()),
TargetOS::getThisOS());
panel.addProperties (buildPropertyList());
addAndMakeVisible (panel);
}
void resized() override
{
auto bounds = getLocalBounds().reduced (10);
header.setBounds (bounds.removeFromTop (150));
createProjectButton.setBounds (bounds.removeFromBottom (30).removeFromRight (150));
bounds.removeFromBottom (5);
panel.setBounds (bounds);
}
void paint (Graphics& g) override
{
g.fillAll (findColour (secondaryBackgroundColourId));
}
private:
NewProjectTemplates::ProjectTemplate projectTemplate;
std::function<void(std::unique_ptr<Project>)> projectCreatedCallback;
ItemHeader header;
TextButton createProjectButton { "Create Project..." };
ValueTree settingsTree { "NewProjectSettings" };
ValueWithDefault projectNameValue { settingsTree, Ids::name, nullptr, "NewProject" },
modulesValue { settingsTree, Ids::dependencies_, nullptr, projectTemplate.requiredModules, "," },
exportersValue { settingsTree, Ids::exporters, nullptr, StringArray (ProjectExporter::getCurrentPlatformExporterTypeInfo().identifier.toString()), "," },
fileOptionsValue { settingsTree, Ids::file, nullptr, NewProjectTemplates::getVarForFileOption (projectTemplate.defaultFileOption) };
ValueWithDefaultWrapper modulePathValue;
PropertyPanel panel;
//==============================================================================
PropertyComponent* createProjectNamePropertyComponent()
{
return new TextPropertyComponent (projectNameValue, "Project Name", 1024, false);
}
PropertyComponent* createModulesPropertyComponent()
{
Array<var> moduleVars;
var requiredModules;
for (auto& m : getJUCEModules())
{
moduleVars.add (m);
if (projectTemplate.requiredModules.contains (m))
requiredModules.append (m);
}
modulesValue = requiredModules;
return new MultiChoicePropertyComponent (modulesValue, "Modules",
getJUCEModules(), moduleVars);
}
PropertyComponent* createModulePathPropertyComponent()
{
return new FilePathPropertyComponent (modulePathValue.getWrappedValueWithDefault(), "Path to Modules", true);
}
PropertyComponent* createExportersPropertyValue()
{
Array<var> exporterVars;
StringArray exporterNames;
for (auto& exporterTypeInfo : ProjectExporter::getExporterTypeInfos())
{
exporterVars.add (exporterTypeInfo.identifier.toString());
exporterNames.add (exporterTypeInfo.displayName);
}
return new MultiChoicePropertyComponent (exportersValue, "Exporters", exporterNames, exporterVars);
}
PropertyComponent* createFileCreationOptionsPropertyComponent()
{
Array<var> optionVars;
StringArray optionStrings;
for (auto& opt : projectTemplate.fileOptionsAndFiles)
{
optionVars.add (NewProjectTemplates::getVarForFileOption (opt.first));
optionStrings.add (NewProjectTemplates::getStringForFileOption (opt.first));
}
return new ChoicePropertyComponent (fileOptionsValue, "File Creation Options", optionStrings, optionVars);
}
Array<PropertyComponent*> buildPropertyList()
{
PropertyListBuilder builder;
builder.add (createProjectNamePropertyComponent());
builder.add (createModulesPropertyComponent());
builder.add (createModulePathPropertyComponent());
builder.add (createExportersPropertyValue());
if (! projectTemplate.fileOptionsAndFiles.empty())
builder.add (createFileCreationOptionsPropertyComponent());
return builder.components;
}
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TemplateComponent)
};
//==============================================================================
class ExampleComponent : public Component
{
public:
ExampleComponent (const File& f, std::function<void(const File&)> selectedCallback)
: exampleFile (f),
metadata (parseJUCEHeaderMetadata (exampleFile)),
exampleSelectedCallback (std::move (selectedCallback)),
header (metadata[Ids::name].toString(), metadata[Ids::description].toString(), BinaryData::background_logo_svg),
codeViewer (doc, &cppTokeniser)
{
addAndMakeVisible (header);
openExampleButton.onClick = [this] { exampleSelectedCallback (exampleFile); };
addAndMakeVisible (openExampleButton);
setupCodeViewer();
addAndMakeVisible (codeViewer);
}
void paint (Graphics& g) override
{
g.fillAll (findColour (secondaryBackgroundColourId));
}
void resized() override
{
auto bounds = getLocalBounds().reduced (10);
header.setBounds (bounds.removeFromTop (125));
openExampleButton.setBounds (bounds.removeFromBottom (30).removeFromRight (150));
codeViewer.setBounds (bounds);
}
private:
void setupCodeViewer()
{
auto fileString = exampleFile.loadFileAsString();
doc.replaceAllContent (fileString);
codeViewer.setScrollbarThickness (6);
codeViewer.setReadOnly (true);
getAppSettings().appearance.applyToCodeEditor (codeViewer);
codeViewer.scrollToLine (findBestLineToScrollToForClass (StringArray::fromLines (fileString),
metadata[Ids::name].toString(),
metadata[Ids::type] == "AudioProcessor"));
}
//==============================================================================
File exampleFile;
var metadata;
std::function<void(const File&)> exampleSelectedCallback;
ItemHeader header;
CPlusPlusCodeTokeniser cppTokeniser;
CodeDocument doc;
CodeEditorComponent codeViewer;
TextButton openExampleButton { "Open Example..." };
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ExampleComponent)
};

+ 244
- 0
extras/Projucer/Source/Application/StartPage/jucer_NewProjectTemplates.h View File

@@ -0,0 +1,244 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
#include "../../Utility/Helpers/jucer_MiscUtilities.h"
//==============================================================================
namespace NewProjectTemplates
{
enum class ProjectCategory
{
application,
plugin,
library
};
inline String getProjectCategoryString (ProjectCategory category)
{
if (category == ProjectCategory::application) return "Application";
if (category == ProjectCategory::plugin) return "Plug-In";
if (category == ProjectCategory::library) return "Library";
jassertfalse;
return "Unknown";
}
enum class FileCreationOptions
{
noFiles,
main,
header,
headerAndCpp,
processorAndEditor
};
using FilenameAndContent = std::pair<String, String>;
using OptionAndFilenameAndContent = std::pair<FileCreationOptions, std::vector<FilenameAndContent>>;
using OptionsAndFiles = std::vector<OptionAndFilenameAndContent>;
struct ProjectTemplate
{
ProjectCategory category;
String displayName, description, projectTypeString;
const char* icon;
StringArray requiredModules;
OptionsAndFiles fileOptionsAndFiles;
FileCreationOptions defaultFileOption;
std::vector<FilenameAndContent> getFilesForOption (FileCreationOptions option) const
{
auto iter = std::find_if (fileOptionsAndFiles.begin(), fileOptionsAndFiles.end(),
[option] (const OptionAndFilenameAndContent& opt) { return opt.first == option; });
if (iter != fileOptionsAndFiles.end())
return iter->second;
return {};
}
};
inline bool isApplication (const ProjectTemplate& t) noexcept { return t.category == ProjectCategory::application; }
inline bool isPlugin (const ProjectTemplate& t) noexcept { return t.category == ProjectCategory::plugin; }
inline bool isLibrary (const ProjectTemplate& t) noexcept { return t.category == ProjectCategory::library; }
//==============================================================================
inline var getVarForFileOption (FileCreationOptions opt)
{
if (opt == FileCreationOptions::noFiles) return "none";
if (opt == FileCreationOptions::main) return "main";
if (opt == FileCreationOptions::header) return "header";
if (opt == FileCreationOptions::headerAndCpp) return "headercpp";
if (opt == FileCreationOptions::processorAndEditor) return "processoreditor";
jassertfalse;
return {};
}
inline FileCreationOptions getFileOptionForVar (var opt)
{
if (opt == "none") return FileCreationOptions::noFiles;
if (opt == "main") return FileCreationOptions::main;
if (opt == "header") return FileCreationOptions::header;
if (opt == "headercpp") return FileCreationOptions::headerAndCpp;
if (opt == "processoreditor") return FileCreationOptions::processorAndEditor;
jassertfalse;
return {};
}
inline String getStringForFileOption (FileCreationOptions opt)
{
if (opt == FileCreationOptions::noFiles) return "No Files";
if (opt == FileCreationOptions::main) return "Main.cpp";
if (opt == FileCreationOptions::header) return "Main.cpp + .h";
if (opt == FileCreationOptions::headerAndCpp) return "Main.cpp + .h/.cpp ";
if (opt == FileCreationOptions::processorAndEditor) return "Processor and Editor";
jassertfalse;
return {};
}
//==============================================================================
template <typename... Strings>
inline StringArray addAndReturn (StringArray arr, Strings... strings)
{
arr.addArray ({ strings... });
return arr;
}
inline std::vector<ProjectTemplate> getAllTemplates()
{
return
{
{ ProjectCategory::application,
"Blank", "Creates a blank JUCE GUI application.",
build_tools::ProjectType_GUIApp::getTypeName(),
BinaryData::wizard_GUI_svg,
getModulesRequiredForComponent(),
{},
FileCreationOptions::noFiles
},
{ ProjectCategory::application,
"GUI", "Creates a blank JUCE GUI application with a single window component.",
build_tools::ProjectType_GUIApp::getTypeName(),
BinaryData::wizard_GUI_svg,
getModulesRequiredForComponent(),
{
{ FileCreationOptions::noFiles, {} },
{ FileCreationOptions::main, { { "Main.cpp", "jucer_MainTemplate_NoWindow_cpp" } } },
{ FileCreationOptions::header, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_ContentCompSimpleTemplate_h" } } },
{ FileCreationOptions::headerAndCpp, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_ContentCompTemplate_h" },
{ "MainComponent.cpp", "jucer_ContentCompTemplate_cpp" } } }
},
FileCreationOptions::headerAndCpp },
{ ProjectCategory::application,
"Audio", "Creates a blank JUCE GUI application with a single window component and audio and MIDI in/out functions.",
build_tools::ProjectType_GUIApp::getTypeName(),
BinaryData::wizard_AudioApp_svg,
addAndReturn (getModulesRequiredForComponent(), "juce_audio_basics", "juce_audio_devices", "juce_audio_formats",
"juce_audio_processors", "juce_audio_utils", "juce_gui_extra"),
{
{ FileCreationOptions::header, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_AudioComponentSimpleTemplate_h" } } },
{ FileCreationOptions::headerAndCpp, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_AudioComponentTemplate_h" },
{ "MainComponent.cpp", "jucer_AudioComponentTemplate_cpp" } } }
},
FileCreationOptions::headerAndCpp },
{ ProjectCategory::application,
"Console", "Creates a command-line application without GUI support.",
build_tools::ProjectType_ConsoleApp::getTypeName(),
BinaryData::wizard_ConsoleApp_svg,
getModulesRequiredForConsole(),
{
{ FileCreationOptions::noFiles, {} },
{ FileCreationOptions::main, { { "Main.cpp", "jucer_MainConsoleAppTemplate_cpp" } } }
},
FileCreationOptions::main },
{ ProjectCategory::application,
"Animated", "Creates a JUCE GUI application which draws an animated graphical display.",
build_tools::ProjectType_GUIApp::getTypeName(),
BinaryData::wizard_AnimatedApp_svg,
addAndReturn (getModulesRequiredForComponent(), "juce_gui_extra"),
{
{ FileCreationOptions::header, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_AudioComponentSimpleTemplate_h" } } },
{ FileCreationOptions::headerAndCpp, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_AnimatedComponentTemplate_h" },
{ "MainComponent.cpp", "jucer_AnimatedComponentTemplate_cpp" } } }
},
FileCreationOptions::headerAndCpp },
{ ProjectCategory::application,
"OpenGL", "Creates a blank JUCE application with a single window component. "
"This component supports openGL drawing features including 3D model import and GLSL shaders.",
build_tools::ProjectType_GUIApp::getTypeName(),
BinaryData::wizard_OpenGL_svg,
addAndReturn (getModulesRequiredForComponent(), "juce_gui_extra", "juce_opengl"),
{
{ FileCreationOptions::header, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_AudioComponentSimpleTemplate_h" } } },
{ FileCreationOptions::headerAndCpp, { { "Main.cpp", "jucer_MainTemplate_Window_cpp" },
{ "MainComponent.h", "jucer_OpenGLComponentTemplate_h" },
{ "MainComponent.cpp", "jucer_OpenGLComponentTemplate_cpp" } } }
},
FileCreationOptions::headerAndCpp },
{ ProjectCategory::plugin,
"Basic", "Creates an audio plug-in with a single window GUI and audio/MIDI IO functions.",
build_tools::ProjectType_AudioPlugin::getTypeName(),
BinaryData::wizard_AudioPlugin_svg,
getModulesRequiredForAudioProcessor(),
{
{ FileCreationOptions::processorAndEditor, { { "PluginProcessor.cpp", "jucer_AudioPluginFilterTemplate_cpp" },
{ "PluginProcessor.h", "jucer_AudioPluginFilterTemplate_h" },
{ "PluginEditor.cpp", "jucer_AudioPluginEditorTemplate_cpp" },
{ "PluginEditor.h", "jucer_AudioPluginEditorTemplate_h" } } }
},
FileCreationOptions::processorAndEditor
},
{ ProjectCategory::library,
"Static Library", "Creates a static library.",
build_tools::ProjectType_StaticLibrary::getTypeName(),
BinaryData::wizard_StaticLibrary_svg,
getModulesRequiredForConsole(),
{},
FileCreationOptions::noFiles
},
{ ProjectCategory::library,
"Dynamic Library", "Creates a dynamic library.",
build_tools::ProjectType_DLL::getTypeName(),
BinaryData::wizard_DLL_svg,
getModulesRequiredForConsole(),
{},
FileCreationOptions::noFiles
}
};
}
}

+ 270
- 0
extras/Projucer/Source/Application/StartPage/jucer_NewProjectWizard.cpp View File

@@ -0,0 +1,270 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#include "../jucer_Headers.h"
#include "../jucer_Application.h"
#include "../../ProjectSaving/jucer_ProjectExporter.h"
#include "jucer_NewProjectWizard.h"
//==============================================================================
static String getFileTemplate (const String& templateName)
{
int dataSize = 0;
if (auto* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize))
return String::fromUTF8 (data, dataSize);
jassertfalse;
return {};
}
static String getJuceHeaderInclude()
{
return CodeHelpers::createIncludePathIncludeStatement (Project::getJuceSourceHFilename());
}
static String getContentComponentName()
{
return "MainComponent";
}
using Opts = NewProjectTemplates::FileCreationOptions;
static bool shouldCreateHeaderFile (Opts opts) noexcept { return opts == Opts::header || opts == Opts::headerAndCpp; }
static bool shouldCreateCppFile (Opts opts) noexcept { return opts == Opts::headerAndCpp; }
static void doBasicProjectSetup (Project& project, const NewProjectTemplates::ProjectTemplate& projectTemplate, const String& name)
{
project.setTitle (name);
project.setProjectType (projectTemplate.projectTypeString);
project.getMainGroup().addNewSubGroup ("Source", 0);
project.getConfigFlag ("JUCE_STRICT_REFCOUNTEDPOINTER") = true;
project.getProjectValue (Ids::useAppConfig) = false;
project.getProjectValue (Ids::addUsingNamespaceToJuceHeader) = false;
if (! ProjucerApplication::getApp().getLicenseController().getCurrentState().isPaidOrGPL())
project.getProjectValue (Ids::displaySplashScreen) = true;
if (NewProjectTemplates::isPlugin (projectTemplate))
project.getConfigFlag ("JUCE_VST3_CAN_REPLACE_VST2") = 0;
}
static std::map<String, String> getSharedFileTokenReplacements()
{
return { { "%%app_headers%%", getJuceHeaderInclude() } };
}
static std::map<String, String> getApplicationFileTokenReplacements (const String& name,
NewProjectTemplates::FileCreationOptions fileOptions,
const File& sourceFolder)
{
auto tokenReplacements = getSharedFileTokenReplacements();
tokenReplacements.insert ({ "%%app_class_name%%",
build_tools::makeValidIdentifier (name + "Application", false, true, false) });
tokenReplacements.insert ({ "%%content_component_class%%",
getContentComponentName() });
tokenReplacements.insert ({ "%%include_juce%%",
getJuceHeaderInclude() });
if (shouldCreateHeaderFile (fileOptions))
tokenReplacements["%%app_headers%%"] << newLine
<< CodeHelpers::createIncludeStatement (sourceFolder.getChildFile ("MainComponent.h"),
sourceFolder.getChildFile ("Main.cpp"));
if (shouldCreateCppFile (fileOptions))
tokenReplacements.insert ({ "%%include_corresponding_header%%",
CodeHelpers::createIncludeStatement (sourceFolder.getChildFile ("MainComponent.h"),
sourceFolder.getChildFile ("MainComponent.cpp")) });
return tokenReplacements;
}
static std::map<String, String> getPluginFileTokenReplacements (const String& name,
const File& sourceFolder)
{
auto tokenReplacements = getSharedFileTokenReplacements();
auto processorCppFile = sourceFolder.getChildFile ("PluginProcessor.cpp");
auto processorHFile = processorCppFile.withFileExtension (".h");
auto editorCppFile = sourceFolder.getChildFile ("PluginEditor.cpp");
auto editorHFile = editorCppFile.withFileExtension (".h");
auto processorHInclude = CodeHelpers::createIncludeStatement (processorHFile, processorCppFile);
auto editorHInclude = CodeHelpers::createIncludeStatement (editorHFile, processorCppFile);
auto processorClassName = build_tools::makeValidIdentifier (name, true, true, false) + "AudioProcessor";
processorClassName = processorClassName.substring (0, 1).toUpperCase() + processorClassName.substring (1);
auto editorClassName = processorClassName + "Editor";
tokenReplacements.insert ({"%%filter_headers%%", processorHInclude + newLine + editorHInclude });
tokenReplacements.insert ({"%%filter_class_name%%", processorClassName });
tokenReplacements.insert ({"%%editor_class_name%%", editorClassName });
tokenReplacements.insert ({"%%editor_cpp_headers%%", processorHInclude + newLine + editorHInclude });
tokenReplacements.insert ({"%%editor_headers%%", getJuceHeaderInclude() + newLine + processorHInclude });
return tokenReplacements;
}
static bool addFiles (Project& project, const NewProjectTemplates::ProjectTemplate& projectTemplate,
const String& name, var fileOptionsVar, StringArray& failedFiles)
{
auto sourceFolder = project.getFile().getSiblingFile ("Source");
if (! sourceFolder.createDirectory())
{
failedFiles.add (sourceFolder.getFullPathName());
return false;
}
auto fileOptions = NewProjectTemplates::getFileOptionForVar (fileOptionsVar);
if (fileOptions == Opts::noFiles)
return true;
auto tokenReplacements = [&]() -> std::map<String, String>
{
if (NewProjectTemplates::isApplication (projectTemplate))
return getApplicationFileTokenReplacements (name, fileOptions, sourceFolder);
if (NewProjectTemplates::isPlugin (projectTemplate))
return getPluginFileTokenReplacements (name, sourceFolder);
jassertfalse;
return {};
}();
auto sourceGroup = project.getMainGroup().getOrCreateSubGroup ("Source");
for (auto& files : projectTemplate.getFilesForOption (fileOptions))
{
auto file = sourceFolder.getChildFile (files.first);
auto fileContent = getFileTemplate (files.second);
for (auto& tokenReplacement : tokenReplacements)
fileContent = fileContent.replace (tokenReplacement.first, tokenReplacement.second, false);
if (! build_tools::overwriteFileWithNewDataIfDifferent (file, fileContent))
{
failedFiles.add (file.getFullPathName());
return false;
}
sourceGroup.addFileAtIndex (file, -1, (file.hasFileExtension (sourceFileExtensions)));
}
return true;
}
static void addModules (Project& project, Array<var> modules, const String& modulePath, bool useGlobalPath)
{
AvailableModulesList list;
list.scanPaths ({ modulePath });
for (auto& mod : list.getAllModules())
if (modules.contains (mod.first))
project.getEnabledModules().addModule (mod.second, false, useGlobalPath);
}
static void addExporters (Project& project, Array<var> exporters)
{
for (auto exporter : exporters)
project.addNewExporter (exporter.toString());
for (Project::ExporterIterator exporter (project); exporter.next();)
for (ProjectExporter::ConfigIterator config (*exporter); config.next();)
config->getValue (Ids::targetName) = project.getProjectFilenameRootString();
}
//==============================================================================
File NewProjectWizard::getLastWizardFolder()
{
if (getAppSettings().lastWizardFolder.isDirectory())
return getAppSettings().lastWizardFolder;
#if JUCE_WINDOWS
static File lastFolderFallback (File::getSpecialLocation (File::userDocumentsDirectory));
#else
static File lastFolderFallback (File::getSpecialLocation (File::userHomeDirectory));
#endif
return lastFolderFallback;
}
std::unique_ptr<Project> NewProjectWizard::createNewProject (const NewProjectTemplates::ProjectTemplate& projectTemplate,
const File& targetFolder, const String& name, var modules, var exporters, var fileOptions,
const String& modulePath, bool useGlobalModulePath)
{
StringArray failedFiles;
if (! targetFolder.exists())
{
if (! targetFolder.createDirectory())
failedFiles.add (targetFolder.getFullPathName());
}
else if (FileHelpers::containsAnyNonHiddenFiles (targetFolder))
{
if (! AlertWindow::showOkCancelBox (AlertWindow::InfoIcon,
TRANS("New JUCE Project"),
TRANS("You chose the folder:\n\nXFLDRX\n\n").replace ("XFLDRX", targetFolder.getFullPathName())
+ TRANS("This folder isn't empty - are you sure you want to create the project there?")
+ "\n\n"
+ TRANS("Any existing files with the same names may be overwritten by the new files.")))
{
return nullptr;
}
}
auto project = std::make_unique<Project> (targetFolder.getChildFile (File::createLegalFileName (name))
.withFileExtension (Project::projectFileExtension));
if (failedFiles.isEmpty())
{
doBasicProjectSetup (*project, projectTemplate, name);
if (addFiles (*project, projectTemplate, name, fileOptions, failedFiles))
{
addExporters (*project, *exporters.getArray());
addModules (*project, *modules.getArray(), modulePath, useGlobalModulePath);
if (project->save (false, true) == FileBasedDocument::savedOk)
{
project->setChangedFlag (false);
project->loadFrom (project->getFile(), true);
}
else
{
failedFiles.add (project->getFile().getFullPathName());
}
}
}
if (! failedFiles.isEmpty())
{
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
TRANS("Errors in Creating Project!"),
TRANS("The following files couldn't be written:")
+ "\n\n"
+ failedFiles.joinIntoString ("\n", 0, 10));
return nullptr;
}
return project;
}

extras/Projucer/Source/Wizards/jucer_NewProjectWizardClasses.h → extras/Projucer/Source/Application/StartPage/jucer_NewProjectWizard.h View File

@@ -18,5 +18,14 @@
#pragma once
#include "jucer_NewProjectTemplates.h"
Component* createNewProjectWizardComponent();
//==============================================================================
namespace NewProjectWizard
{
File getLastWizardFolder();
std::unique_ptr<Project> createNewProject (const NewProjectTemplates::ProjectTemplate& projectTemplate,
const File& targetFolder, const String& name, var modules, var exporters, var fileOptions,
const String& modulePath, bool useGlobalModulePath);
}

+ 263
- 0
extras/Projucer/Source/Application/StartPage/jucer_StartPageComponent.cpp View File

@@ -0,0 +1,263 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#include "../jucer_Headers.h"
#include "../jucer_Application.h"
#include "jucer_StartPageComponent.h"
#include "jucer_StartPageTreeHolder.h"
#include "jucer_NewProjectTemplates.h"
#include "jucer_ContentComponents.h"
//==============================================================================
struct ContentComponent : public Component
{
void resized() override
{
if (content != nullptr)
content->setBounds (getLocalBounds());
}
void setContent (std::unique_ptr<Component>&& newContent)
{
if (content.get() != newContent.get())
{
content = std::move (newContent);
addAndMakeVisible (content.get());
resized();
}
}
private:
std::unique_ptr<Component> content;
//==============================================================================
JUCE_LEAK_DETECTOR (ContentComponent)
};
//==============================================================================
static File findExampleFile (int dirIndex, int index)
{
auto dir = ProjucerApplication::getSortedExampleDirectories()[dirIndex];
return ProjucerApplication::getSortedExampleFilesInDirectory (dir)[index];
}
static std::unique_ptr<Component> createExampleProjectsTab (ContentComponent& content, std::function<void(const File&)> cb)
{
StringArray exampleCategories;
std::vector<StringArray> examples;
for (auto& dir : ProjucerApplication::getSortedExampleDirectories())
{
exampleCategories.add (dir.getFileName());
StringArray ex;
for (auto& f : ProjucerApplication::getSortedExampleFilesInDirectory (dir))
ex.add (f.getFileNameWithoutExtension());
examples.push_back (ex);
}
if (exampleCategories.isEmpty())
return nullptr;
auto selectedCallback = [&, cb] (int category, int index) mutable
{
content.setContent (std::make_unique<ExampleComponent> (findExampleFile (category, index), cb));
};
return std::make_unique<StartPageTreeHolder> (exampleCategories,
examples,
std::move (selectedCallback),
StartPageTreeHolder::Open::no);
}
//==============================================================================
static StringArray getAllTemplateCategoryStrings()
{
StringArray categories;
for (auto& t : NewProjectTemplates::getAllTemplates())
categories.addIfNotAlreadyThere (NewProjectTemplates::getProjectCategoryString (t.category));
return categories;
}
static std::vector<NewProjectTemplates::ProjectTemplate> getTemplatesInCategory (const String& category)
{
std::vector<NewProjectTemplates::ProjectTemplate> templates;
for (auto& t : NewProjectTemplates::getAllTemplates())
if (NewProjectTemplates::getProjectCategoryString (t.category) == category)
templates.push_back (t);
return templates;
}
static StringArray getAllTemplateNamesForCategory (const String& category)
{
StringArray types;
for (auto& t : getTemplatesInCategory (category))
types.add (t.displayName);
return types;
}
static std::unique_ptr<Component> createProjectTemplatesTab (ContentComponent& content,
std::function<void(std::unique_ptr<Project>&&)>&& cb)
{
auto categories = getAllTemplateCategoryStrings();
std::vector<StringArray> templateNames;
for (auto& c : categories)
templateNames.push_back (getAllTemplateNamesForCategory (c));
auto selectedCallback = [&, cb] (int category, int index)
{
auto categoryString = getAllTemplateCategoryStrings()[category];
auto templates = getTemplatesInCategory (categoryString);
content.setContent (std::make_unique<TemplateComponent> (templates[(size_t) index], std::move (cb)));
};
auto holder = std::make_unique<StartPageTreeHolder> (categories,
templateNames,
std::move (selectedCallback),
StartPageTreeHolder::Open::yes);
holder->setSelectedItem (categories[0], 1);
return std::move (holder);
}
//==============================================================================
struct ProjectTemplatesAndExamples : public TabbedComponent
{
ProjectTemplatesAndExamples (ContentComponent& c,
std::function<void(std::unique_ptr<Project>&&)>&& newProjectCb,
std::function<void(const File&)>&& exampleCb)
: TabbedComponent (TabbedButtonBar::Orientation::TabsAtTop),
content (c),
exampleSelectedCallback (std::move (exampleCb))
{
addTab ("New Project", Colours::transparentBlack, createProjectTemplatesTab (content, std::move (newProjectCb)).release(), true);
refreshExamplesTab();
}
void refreshExamplesTab()
{
auto wasOpen = (getCurrentTabIndex() == 1);
removeTab (1);
auto exampleTabs = createExampleProjectsTab (content, exampleSelectedCallback);
addTab ("Open Example", Colours::transparentBlack, exampleTabs == nullptr ? new SetJUCEPathComponent (*this)
: exampleTabs.release(),
true);
if (wasOpen)
setCurrentTabIndex (1);
}
private:
//==============================================================================
struct SetJUCEPathComponent : public Component,
private ChangeListener
{
explicit SetJUCEPathComponent (ProjectTemplatesAndExamples& o)
: owner (o)
{
getGlobalProperties().addChangeListener (this);
setPathButton.setButtonText ("Set path to JUCE...");
setPathButton.onClick = [] { ProjucerApplication::getApp().showPathsWindow (true); };
addAndMakeVisible (setPathButton);
}
~SetJUCEPathComponent() override
{
getGlobalProperties().removeChangeListener (this);
}
void paint (Graphics& g) override
{
g.fillAll (findColour (secondaryBackgroundColourId));
}
void resized() override
{
auto bounds = getLocalBounds().reduced (5);
bounds.removeFromTop (25);
setPathButton.setBounds (bounds.removeFromTop (25));
}
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
if (isValidJUCEExamplesDirectory (ProjucerApplication::getJUCEExamplesDirectoryPathFromGlobal()))
owner.refreshExamplesTab();
}
ProjectTemplatesAndExamples& owner;
TextButton setPathButton;
};
ContentComponent& content;
std::function<void(const File&)> exampleSelectedCallback;
};
//==============================================================================
StartPageComponent::StartPageComponent (std::function<void(std::unique_ptr<Project>&&)>&& newProjectCb,
std::function<void(const File&)>&& exampleCb)
: content (std::make_unique<ContentComponent>()),
tabs (std::make_unique<ProjectTemplatesAndExamples> (*content, std::move (newProjectCb), std::move (exampleCb)))
{
tabs->setOutline (0);
addAndMakeVisible (*tabs);
addAndMakeVisible (openExistingButton);
openExistingButton.setCommandToTrigger (&ProjucerApplication::getCommandManager(), CommandIDs::open, true);
addAndMakeVisible (*content);
setSize (900, 600);
}
void StartPageComponent::paint (Graphics& g)
{
g.fillAll (findColour (backgroundColourId));
}
void StartPageComponent::resized()
{
auto bounds = getLocalBounds().reduced (10);
auto tabBounds = bounds.removeFromLeft (bounds.getWidth() / 3);
openExistingButton.setBounds (tabBounds.removeFromBottom (30).reduced (10, 0));
tabBounds.removeFromBottom (5);
tabs->setBounds (tabBounds);
bounds.removeFromLeft (10);
content->setBounds (bounds);
}

extras/Projucer/Source/Wizards/jucer_StartPageComponent.h → extras/Projucer/Source/Application/StartPage/jucer_StartPageComponent.h View File

@@ -18,35 +18,26 @@
#pragma once
struct ContentComponent;
struct ProjectTemplatesAndExamples;
//==============================================================================
class StartPageComponent : public Component
class StartPageComponent : public Component
{
public:
StartPageComponent()
{
setSize (900, 650);
StartPageComponent (std::function<void(std::unique_ptr<Project>&&)>&& newProjectCb,
std::function<void(const File&)>&& exampleCb);
WizardComp* projectWizard = new WizardComp();
panel.addTab ("Create New Project", new TemplateTileBrowser (projectWizard), true);
panel.addTab ("New Project Options", projectWizard, true);
addAndMakeVisible (panel);
}
void paint (Graphics& g) override
{
g.fillAll (findColour (backgroundColourId));
}
void resized() override
{
panel.setBounds (getLocalBounds());
}
void paint (Graphics& g) override;
void resized() override;
private:
SlidingPanelComponent panel;
//==============================================================================
std::unique_ptr<ContentComponent> content;
std::unique_ptr<ProjectTemplatesAndExamples> tabs;
TextButton openExistingButton { "Open Existing Project..." };
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StartPageComponent)
};

+ 167
- 0
extras/Projucer/Source/Application/StartPage/jucer_StartPageTreeHolder.h View File

@@ -0,0 +1,167 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
class StartPageTreeHolder : public Component
{
public:
enum class Open { no, yes };
StartPageTreeHolder (const StringArray& headerNames, const std::vector<StringArray>& itemNames,
std::function<void(int, int)>&& selectedCallback, Open shouldBeOpen)
: headers (headerNames),
items (itemNames),
itemSelectedCallback (std::move (selectedCallback))
{
jassert (headers.size() == (int) items.size());
tree.setRootItem (new TreeRootItem (*this));
tree.setRootItemVisible (false);
tree.setIndentSize (15);
tree.setDefaultOpenness (shouldBeOpen == Open::yes);
addAndMakeVisible (tree);
}
~StartPageTreeHolder() override
{
tree.deleteRootItem();
}
void paint (Graphics& g) override
{
g.fillAll (findColour (secondaryBackgroundColourId));
}
void resized() override
{
tree.setBounds (getLocalBounds());
}
void setSelectedItem (const String& category, int index)
{
auto* root = tree.getRootItem();
for (int i = root->getNumSubItems(); --i >=0;)
{
if (auto* item = root->getSubItem (i))
{
if (item->getUniqueName() == category)
item->getSubItem (index)->setSelected (true, true);
}
}
}
private:
//==============================================================================
class TreeSubItem : public TreeViewItem
{
public:
TreeSubItem (StartPageTreeHolder& o, const String& n, const StringArray& subItems)
: owner (o), name (n), isHeader (subItems.size() > 0)
{
for (auto& s : subItems)
addSubItem (new TreeSubItem (owner, s, {}));
}
bool mightContainSubItems() override { return isHeader; }
bool canBeSelected() const override { return ! isHeader; }
int getItemWidth() const override { return -1; }
int getItemHeight() const override { return 25; }
String getUniqueName() const override { return name; }
void paintOpenCloseButton (Graphics& g, const Rectangle<float>& area, Colour, bool isMouseOver) override
{
g.setColour (getOwnerView()->findColour (isSelected() ? defaultHighlightedTextColourId
: treeIconColourId));
TreeViewItem::paintOpenCloseButton (g, area, getOwnerView()->findColour (defaultIconColourId), isMouseOver);
}
void paintItem (Graphics& g, int w, int h) override
{
Rectangle<int> bounds (w, h);
auto shouldBeHighlighted = isSelected();
if (shouldBeHighlighted)
{
g.setColour (getOwnerView()->findColour (defaultHighlightColourId));
g.fillRect (bounds);
}
g.setColour (shouldBeHighlighted ? getOwnerView()->findColour (defaultHighlightedTextColourId)
: getOwnerView()->findColour (defaultTextColourId));
g.drawFittedText (name, bounds.reduced (5).withTrimmedLeft (10), Justification::centredLeft, 1);
}
void itemClicked (const MouseEvent&) override
{
if (isSelected())
itemSelectionChanged (true);
}
void itemSelectionChanged (bool isNowSelected) override
{
jassert (! isHeader);
if (isNowSelected)
owner.itemSelectedCallback (getParentItem()->getIndexInParent(), getIndexInParent());
}
private:
StartPageTreeHolder& owner;
String name;
bool isHeader = false;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TreeSubItem)
};
struct TreeRootItem : public TreeViewItem
{
explicit TreeRootItem (StartPageTreeHolder& o)
: owner (o)
{
for (int i = 0; i < owner.headers.size(); ++i)
addSubItem (new TreeSubItem (owner, owner.headers[i], owner.items[(size_t) i]));
}
bool mightContainSubItems() override { return ! owner.headers.isEmpty();}
StartPageTreeHolder& owner;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TreeRootItem)
};
//==============================================================================
TreeView tree;
StringArray headers;
std::vector<StringArray> items;
std::function<void(int, int)> itemSelectedCallback;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StartPageTreeHolder)
};

+ 11
- 8
extras/Projucer/Source/Application/Windows/jucer_PIPCreatorWindowComponent.h View File

@@ -140,11 +140,15 @@ private:
{
Array<var> exporterVars;
for (auto& e : ProjectExporter::getExporterValueTreeNames())
exporterVars.add (e.toLowerCase());
StringArray exporterNames;
builder.add (new MultiChoicePropertyComponent (exportersValue, "Exporters",
ProjectExporter::getExporterNames(), exporterVars),
for (auto& exporterTypeInfo : ProjectExporter::getExporterTypeInfos())
{
exporterVars.add (exporterTypeInfo.identifier.toString());
exporterNames.add (exporterTypeInfo.displayName);
}
builder.add (new MultiChoicePropertyComponent (exportersValue, "Exporters", exporterNames, exporterVars),
"The exporters that should be added to your project.");
}
@@ -169,9 +173,9 @@ private:
}
//==============================================================================
void valueTreePropertyChanged (ValueTree&, const Identifier& id) override
void valueTreePropertyChanged (ValueTree&, const Identifier& identifier) override
{
if (id == Ids::type)
if (identifier == Ids::type)
{
auto type = typeValue.get().toString();
@@ -308,8 +312,7 @@ private:
websiteValue { pipTree, Ids::website, nullptr },
descriptionValue { pipTree, Ids::description, nullptr },
dependenciesValue { pipTree, Ids::dependencies_, nullptr, getModulesRequiredForComponent(), "," },
exportersValue { pipTree, Ids::exporters, nullptr,
StringArray (ProjectExporter::getValueTreeNameForExporter (ProjectExporter::getCurrentPlatformExporterName()).toLowerCase()), "," },
exportersValue { pipTree, Ids::exporters, nullptr, StringArray (ProjectExporter::getCurrentPlatformExporterTypeInfo().identifier.toString()), "," },
moduleFlagsValue { pipTree, Ids::moduleFlags, nullptr, "JUCE_STRICT_REFCOUNTEDPOINTER=1" },
definesValue { pipTree, Ids::defines, nullptr },
typeValue { pipTree, Ids::type, nullptr, "Component" },


+ 8
- 26
extras/Projucer/Source/Application/jucer_Application.cpp View File

@@ -621,7 +621,7 @@ PopupMenu ProjucerApplication::createExamplesPopupMenu() noexcept
#endif
//==============================================================================
static File getJUCEExamplesDirectoryPathFromGlobal()
File ProjucerApplication::getJUCEExamplesDirectoryPathFromGlobal() noexcept
{
auto globalPath = File::createFileWithoutCheckingPath (getAppSettings().getStoredPath (Ids::jucePath, TargetOS::getThisOS()).get().toString()
.replace ("~", File::getSpecialLocation (File::userHomeDirectory).getFullPathName()));
@@ -659,7 +659,7 @@ Array<File> ProjucerApplication::getSortedExampleDirectories() noexcept
return exampleDirectories;
}
Array<File> ProjucerApplication::getSortedExampleFilesInDirectory (const File& directory) const noexcept
Array<File> ProjucerApplication::getSortedExampleFilesInDirectory (const File& directory) noexcept
{
Array<File> exampleFiles;
@@ -671,26 +671,6 @@ Array<File> ProjucerApplication::getSortedExampleFilesInDirectory (const File& d
return exampleFiles;
}
bool ProjucerApplication::findWindowAndOpenPIP (const File& pip)
{
auto* window = mainWindowList.getFrontmostWindow();
bool shouldCloseWindow = false;
if (window == nullptr)
{
window = mainWindowList.getOrCreateEmptyWindow();
shouldCloseWindow = true;
}
if (window->tryToOpenPIP (pip))
return true;
if (shouldCloseWindow)
mainWindowList.closeWindow (window);
return false;
}
void ProjucerApplication::findAndLaunchExample (int selectedIndex)
{
File example;
@@ -711,7 +691,7 @@ void ProjucerApplication::findAndLaunchExample (int selectedIndex)
// example doesn't exist?
jassert (example != File());
findWindowAndOpenPIP (example);
mainWindowList.openFile (example);
}
//==============================================================================
@@ -731,7 +711,7 @@ static String getPlatformSpecificFileExtension()
static File getPlatformSpecificProjectFolder()
{
auto examplesDir = getJUCEExamplesDirectoryPathFromGlobal();
auto examplesDir = ProjucerApplication::getJUCEExamplesDirectoryPathFromGlobal();
if (examplesDir == File())
return {};
@@ -1165,7 +1145,8 @@ void ProjucerApplication::createNewProject()
void ProjucerApplication::createNewProjectFromClipboard()
{
auto tempFile = File::getSpecialLocation (File::SpecialLocationType::tempDirectory).getChildFile ("PIPs").getChildFile ("Clipboard")
.getChildFile ("PIPFile_" + String (std::abs (Random::getSystemRandom().nextInt())) + ".h");
.getChildFile ("PIPFile_" + String (std::abs (Random::getSystemRandom().nextInt())) + ".h")
.getNonexistentSibling();
if (tempFile.existsAsFile())
tempFile.deleteFile();
@@ -1173,10 +1154,11 @@ void ProjucerApplication::createNewProjectFromClipboard()
tempFile.create();
tempFile.appendText (SystemClipboard::getTextFromClipboard());
if (! findWindowAndOpenPIP (tempFile))
if (! mainWindowList.openFile (tempFile))
{
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", "Couldn't create project from clipboard contents.");
tempFile.deleteFile();
mainWindowList.closeWindow (mainWindowList.windows.getLast());
}
}


+ 4
- 3
extras/Projucer/Source/Application/jucer_Application.h View File

@@ -82,6 +82,10 @@ public:
bool shouldPromptUserAboutIncorrectJUCEPath() const;
void setShouldPromptUserAboutIncorrectJUCEPath (bool shouldPrompt);
static File getJUCEExamplesDirectoryPathFromGlobal() noexcept;
static Array<File> getSortedExampleDirectories() noexcept;
static Array<File> getSortedExampleFilesInDirectory (const File&) noexcept;
//==============================================================================
ProjucerLookAndFeel lookAndFeel;
@@ -131,9 +135,6 @@ private:
void handleMainMenuCommand (int menuItemID);
PopupMenu createExamplesPopupMenu() noexcept;
Array<File> getSortedExampleDirectories() noexcept;
Array<File> getSortedExampleFilesInDirectory (const File&) const noexcept;
bool findWindowAndOpenPIP (const File&);
void findAndLaunchExample (int);
void checkIfGlobalJUCEPathHasChanged();


+ 52
- 115
extras/Projucer/Source/Application/jucer_MainWindow.cpp View File

@@ -19,7 +19,7 @@
#include "../Application/jucer_Headers.h"
#include "jucer_Application.h"
#include "jucer_MainWindow.h"
#include "../Wizards/jucer_NewProjectWizardClasses.h"
#include "StartPage/jucer_StartPageComponent.h"
#include "../Utility/UI/jucer_JucerTreeViewBase.h"
#include "../ProjectSaving/jucer_ProjectSaver.h"
#include "UserAccount/jucer_LoginFormComponent.h"
@@ -177,7 +177,7 @@ void MainWindow::createProjectContentCompIfNeeded()
}
}
void MainWindow::setTitleBarIcon()
void MainWindow::updateTitleBarIcon()
{
if (auto* peer = getPeer())
{
@@ -198,7 +198,7 @@ void MainWindow::makeVisible()
setVisible (true);
addToDesktop();
restoreWindowPosition();
setTitleBarIcon();
updateTitleBarIcon();
getContentComponent()->grabKeyboardFocus();
}
@@ -270,9 +270,7 @@ void MainWindow::setProject (std::unique_ptr<Project> newProject)
}
projectNameValue.referTo (currentProject != nullptr ? currentProject->getProjectValue (Ids::name) : Value());
if (auto* peer = getPeer())
peer->setRepresentedFile (currentProject != nullptr ? currentProject->getFile() : File());
initialiseProjectWindow();
ProjucerApplication::getCommandManager().commandStatusChanged();
}
@@ -299,8 +297,6 @@ bool MainWindow::canOpenFile (const File& file) const
bool MainWindow::openFile (const File& file)
{
createProjectContentCompIfNeeded();
if (file.hasFileExtension (Project::projectFileExtension))
{
auto newDoc = std::make_unique<Project> (file);
@@ -311,7 +307,9 @@ bool MainWindow::openFile (const File& file)
setProject (std::move (newDoc));
currentProject->setChangedFlag (false);
createProjectContentCompIfNeeded();
getProjectContentComponent()->reloadLastOpenDocuments();
currentProject->updateDeprecatedProjectSettingsInteractively();
return true;
@@ -319,16 +317,18 @@ bool MainWindow::openFile (const File& file)
}
else if (file.exists())
{
if (isPIPFile (file) && openPIP ({ file }))
return true;
createProjectContentCompIfNeeded();
return getProjectContentComponent()->showEditorForFile (file, true);
}
return false;
}
bool MainWindow::tryToOpenPIP (const File& pipFile)
bool MainWindow::openPIP (PIPGenerator generator)
{
PIPGenerator generator (pipFile);
if (! generator.hasValidPIP())
return false;
@@ -343,7 +343,6 @@ bool MainWindow::tryToOpenPIP (const File& pipFile)
return false;
}
if (! generator.createMainCpp())
{
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
@@ -353,110 +352,43 @@ bool MainWindow::tryToOpenPIP (const File& pipFile)
return false;
}
if (! ProjucerApplication::getApp().mainWindowList.openFile (generator.getJucerFile()))
return false;
openPIP (generator);
return true;
}
static bool isDivider (const String& line)
{
auto afterIndent = line.trim();
if (afterIndent.startsWith ("//") && afterIndent.length() > 20)
if (! openFile (generator.getJucerFile()))
{
afterIndent = afterIndent.substring (2);
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
"PIP Error.",
"Failed to open .jucer file.");
if (afterIndent.containsOnly ("=")
|| afterIndent.containsOnly ("/")
|| afterIndent.containsOnly ("-"))
{
return true;
}
return false;
}
return false;
setupTemporaryPIPProject (generator);
return true;
}
static bool isEndOfCommentBlock (const String& line)
void MainWindow::setupTemporaryPIPProject (PIPGenerator& generator)
{
if (line.contains ("*/"))
return true;
jassert (currentProject != nullptr);
return false;
}
static int getIndexOfCommentBlockStart (const StringArray& lines, int blockEndIndex)
{
for (int i = blockEndIndex; i >= 0; --i)
{
if (lines[i].contains ("/*"))
return i;
}
currentProject->setTemporaryDirectory (generator.getOutputDirectory());
return 0;
}
ProjectSaver liveBuildSaver (*currentProject);
liveBuildSaver.saveContentNeededForLiveBuild();
static int findBestLineToScrollTo (StringArray lines, StringRef className)
{
for (auto line : lines)
if (auto* pcc = getProjectContentComponent())
{
if (line.contains ("struct " + className) || line.contains ("class " + className))
{
auto index = lines.indexOf (line);
if (isDivider (lines[index - 1]))
return index - 1;
if (isEndOfCommentBlock (lines[index - 1]))
{
auto blockStartIndex = getIndexOfCommentBlockStart (lines, index - 1);
if (blockStartIndex > 0 && isDivider (lines [blockStartIndex - 1]))
return blockStartIndex - 1;
return blockStartIndex;
}
return lines.indexOf (line);
}
}
pcc->invokeDirectly (CommandIDs::toggleBuildEnabled, true);
pcc->invokeDirectly (CommandIDs::buildNow, true);
pcc->invokeDirectly (CommandIDs::toggleContinuousBuild, true);
return 0;
}
auto fileToDisplay = generator.getPIPFile();
void MainWindow::openPIP (PIPGenerator& generator)
{
if (auto* window = ProjucerApplication::getApp().mainWindowList.getMainWindowForFile (generator.getJucerFile()))
{
if (auto* project = window->getProject())
if (fileToDisplay != File())
{
project->setTemporaryDirectory (generator.getOutputDirectory());
ProjectSaver liveBuildSaver (*project);
liveBuildSaver.saveContentNeededForLiveBuild();
pcc->showEditorForFile (fileToDisplay, true);
if (auto* pcc = window->getProjectContentComponent())
{
pcc->invokeDirectly (CommandIDs::toggleBuildEnabled, true);
pcc->invokeDirectly (CommandIDs::buildNow, true);
pcc->invokeDirectly (CommandIDs::toggleContinuousBuild, true);
auto fileToDisplay = generator.getPIPFile();
if (fileToDisplay != File())
{
pcc->showEditorForFile (fileToDisplay, true);
if (auto* sourceCodeEditor = dynamic_cast <SourceCodeEditor*> (pcc->getEditorComponent()))
{
sourceCodeEditor->editor->scrollToLine (findBestLineToScrollTo (StringArray::fromLines (fileToDisplay.loadFileAsString()),
generator.getMainClassName()));
}
}
}
if (auto* sourceCodeEditor = dynamic_cast <SourceCodeEditor*> (pcc->getEditorComponent()))
sourceCodeEditor->editor->scrollToLine (findBestLineToScrollToForClass (StringArray::fromLines (fileToDisplay.loadFileAsString()),
generator.getMainClassName(), currentProject->getProjectType().isAudioPlugin()));
}
}
}
@@ -476,10 +408,7 @@ void MainWindow::filesDropped (const StringArray& filenames, int /*mouseX*/, int
{
const File f (filename);
if (tryToOpenPIP (f))
continue;
if (! isPIPFile (f) && (canOpenFile (f) && openFile (f)))
if (canOpenFile (f) && openFile (f))
break;
}
}
@@ -526,16 +455,26 @@ void MainWindow::activeWindowStatusChanged()
ProjucerApplication::getApp().openDocumentManager.reloadModifiedFiles();
}
void MainWindow::initialiseProjectWindow()
{
setResizable (true, false);
updateTitleBarIcon();
}
void MainWindow::showStartPage()
{
jassert (currentProject == nullptr);
setContentOwned (createNewProjectWizardComponent(), true);
setContentOwned (new StartPageComponent ([this] (std::unique_ptr<Project>&& newProject) { setProject (std::move (newProject)); },
[this] (const File& exampleFile) { openFile (exampleFile); }),
true);
centreWithSize (900, 630);
setVisible (true);
setResizable (false, false);
setName ("New Project");
addToDesktop();
centreWithSize (getContentComponent()->getWidth(), getContentComponent()->getHeight());
setVisible (true);
getContentComponent()->grabKeyboardFocus();
}
@@ -710,6 +649,9 @@ void MainWindowList::openDocument (OpenDocumentManager::Document* doc, bool grab
bool MainWindowList::openFile (const File& file, bool openInBackground)
{
if (! file.exists())
return false;
for (auto* w : windows)
{
if (w->getProject() != nullptr && w->getProject()->getFile() == file)
@@ -729,6 +671,7 @@ bool MainWindowList::openFile (const File& file, bool openInBackground)
if (w->openFile (file))
{
w->makeVisible();
w->setResizable (true, false);
checkWindowBounds (*w);
if (openInBackground && previousFrontWindow != nullptr)
@@ -741,13 +684,7 @@ bool MainWindowList::openFile (const File& file, bool openInBackground)
return false;
}
if (getFrontmostWindow()->tryToOpenPIP (file))
return true;
if (! isPIPFile (file) && file.exists())
return getFrontmostWindow()->openFile (file);
return false;
return getFrontmostWindow()->openFile (file);
}
MainWindow* MainWindowList::createNewMainWindow()


+ 6
- 4
extras/Projucer/Source/Application/jucer_MainWindow.h View File

@@ -51,10 +51,9 @@ public:
void setProject (std::unique_ptr<Project> newProject);
Project* getProject() const { return currentProject.get(); }
bool tryToOpenPIP (const File& f);
void makeVisible();
void restoreWindowPosition();
void updateTitleBarIcon();
bool closeCurrentProject (OpenDocumentManager::SaveIfNeeded askToSave);
void moveProject (File newProjectFile, OpenInIDE openInIDE);
@@ -84,8 +83,11 @@ private:
static const char* getProjectWindowPosName() { return "projectWindowPos"; }
void createProjectContentCompIfNeeded();
void setTitleBarIcon();
void openPIP (PIPGenerator&);
bool openPIP (PIPGenerator);
void setupTemporaryPIPProject (PIPGenerator&);
void initialiseProjectWindow();
std::unique_ptr<Project> currentProject;
Value projectNameValue;


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h View File

@@ -7,7 +7,7 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::AnimatedAppComponent
class %%content_component_class%% : public juce::AnimatedAppComponent
{
public:
//==============================================================================
@@ -19,7 +19,7 @@ public:
setFramesPerSecond (60); // This sets the frequency of the update calls.
}
~%%content_component_class%%()
~%%content_component_class%%() override
{
}


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h View File

@@ -7,12 +7,12 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::AnimatedAppComponent
class %%content_component_class%% : public juce::AnimatedAppComponent
{
public:
//==============================================================================
%%content_component_class%%();
~%%content_component_class%%();
~%%content_component_class%%() override;
//==============================================================================
void update() override;


+ 1
- 1
extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h View File

@@ -7,7 +7,7 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::AudioAppComponent
class %%content_component_class%% : public juce::AudioAppComponent
{
public:
//==============================================================================


+ 1
- 1
extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentTemplate.h View File

@@ -7,7 +7,7 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::AudioAppComponent
class %%content_component_class%% : public juce::AudioAppComponent
{
public:
//==============================================================================


+ 1
- 1
extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp View File

@@ -10,7 +10,7 @@
//==============================================================================
%%editor_class_name%%::%%editor_class_name%% (%%filter_class_name%%& p)
: AudioProcessorEditor (&p), processor (p)
: AudioProcessorEditor (&p), audioProcessor (p)
{
// Make sure that before the constructor has finished, you've set the
// editor's size to whatever you need it to be.


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h View File

@@ -17,7 +17,7 @@ class %%editor_class_name%% : public juce::AudioProcessorEditor
{
public:
%%editor_class_name%% (%%filter_class_name%%&);
~%%editor_class_name%%();
~%%editor_class_name%%() override;
//==============================================================================
void paint (juce::Graphics&) override;
@@ -26,7 +26,7 @@ public:
private:
// This reference is provided as a quick way for your editor to
// access the processor object that created it.
%%filter_class_name%%& processor;
%%filter_class_name%%& audioProcessor;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%editor_class_name%%)
};

+ 1
- 1
extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h View File

@@ -18,7 +18,7 @@ class %%filter_class_name%% : public juce::AudioProcessor
public:
//==============================================================================
%%filter_class_name%%();
~%%filter_class_name%%();
~%%filter_class_name%%() override;
//==============================================================================
void prepareToPlay (double sampleRate, int samplesPerBlock) override;


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h View File

@@ -7,7 +7,7 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::Component
class %%content_component_class%% : public juce::Component
{
public:
//==============================================================================
@@ -16,7 +16,7 @@ public:
setSize (600, 400);
}
~%%content_component_class%%()
~%%content_component_class%%() override
{
}


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompTemplate.h View File

@@ -7,12 +7,12 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::Component
class %%content_component_class%% : public juce::Component
{
public:
//==============================================================================
%%content_component_class%%();
~%%content_component_class%%();
~%%content_component_class%%() override;
//==============================================================================
void paint (juce::Graphics&) override;


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_InlineComponentTemplate.h View File

@@ -1,5 +1,5 @@
//==============================================================================
class %%component_class%% : public juce::Component
class %%component_class%% : public juce::Component
{
public:
%%component_class%%()
@@ -9,7 +9,7 @@ public:
}
~%%component_class%%()
~%%component_class%%() override
{
}


+ 1
- 1
extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp View File

@@ -17,7 +17,7 @@ public:
const juce::String getApplicationName() override { return ProjectInfo::projectName; }
const juce::String getApplicationVersion() override { return ProjectInfo::versionString; }
bool moreThanOneInstanceAllowed() override { return %%allow_more_than_one_instance%%; }
bool moreThanOneInstanceAllowed() override { return true; }
//==============================================================================
void initialise (const juce::String& commandLine) override


+ 0
- 104
extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp View File

@@ -1,104 +0,0 @@
/*
==============================================================================
This file contains the basic startup code for a JUCE application.
==============================================================================
*/
%%app_headers%%
//==============================================================================
class %%app_class_name%% : public juce::JUCEApplication
{
public:
//==============================================================================
%%app_class_name%%() {}
const juce::String getApplicationName() override { return ProjectInfo::projectName; }
const juce::String getApplicationVersion() override { return ProjectInfo::versionString; }
bool moreThanOneInstanceAllowed() override { return %%allow_more_than_one_instance%%; }
//==============================================================================
void initialise (const juce::String& commandLine) override
{
// This method is where you should put your application's initialisation code..
mainWindow.reset (new MainWindow (getApplicationName()));
}
void shutdown() override
{
// Add your application's shutdown code here..
mainWindow = nullptr; // (deletes our window)
}
//==============================================================================
void systemRequestedQuit() override
{
// This is called when the app is being asked to quit: you can ignore this
// request and let the app carry on running, or call quit() to allow the app to close.
quit();
}
void anotherInstanceStarted (const juce::String& commandLine) override
{
// When another instance of the app is launched while this one is running,
// this method is invoked, and the commandLine parameter tells you what
// the other instance's command-line arguments were.
}
//==============================================================================
/*
This class implements the desktop window that contains an instance of
our %%content_component_class%% class.
*/
class MainWindow : public juce::DocumentWindow
{
public:
MainWindow (juce::String name)
: DocumentWindow (name,
juce::Desktop::getInstance().getDefaultLookAndFeel()
.findColour (juce::ResizableWindow::backgroundColourId),
DocumentWindow::allButtons)
{
setUsingNativeTitleBar (true);
setContentOwned (new %%content_component_class%%(), true);
#if JUCE_IOS || JUCE_ANDROID
setFullScreen (true);
#else
setResizable (true, true);
centreWithSize (getWidth(), getHeight());
#endif
setVisible (true);
}
void closeButtonPressed() override
{
// This is called when the user tries to close this window. Here, we'll just
// ask the app to quit when this happens, but you can change this to do
// whatever you need.
juce::JUCEApplication::getInstance()->systemRequestedQuit();
}
/* Note: Be careful if you override any DocumentWindow methods - the base
class uses a lot of them, so by overriding you might break its functionality.
It's best to do all your work in your content component instead, but if
you really have to override any DocumentWindow methods, make sure your
subclass also calls the superclass's method.
*/
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)
};
private:
std::unique_ptr<MainWindow> mainWindow;
};
//==============================================================================
// This macro generates the main() routine that launches the app.
START_JUCE_APPLICATION (%%app_class_name%%)

+ 1
- 1
extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp View File

@@ -17,7 +17,7 @@ public:
const juce::String getApplicationName() override { return ProjectInfo::projectName; }
const juce::String getApplicationVersion() override { return ProjectInfo::versionString; }
bool moreThanOneInstanceAllowed() override { return %%allow_more_than_one_instance%%; }
bool moreThanOneInstanceAllowed() override { return true; }
//==============================================================================
void initialise (const juce::String& commandLine) override


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_NewComponentTemplate.h View File

@@ -15,11 +15,11 @@
//==============================================================================
/*
*/
class %%component_class%% : public juce::Component
class %%component_class%% : public juce::Component
{
public:
%%component_class%%();
~%%component_class%%();
~%%component_class%%() override;
void paint (juce::Graphics&) override;
void resized() override;


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h View File

@@ -15,7 +15,7 @@
//==============================================================================
/*
*/
class %%component_class%% : public juce::Component
class %%component_class%% : public juce::Component
{
public:
%%component_class%%()
@@ -25,7 +25,7 @@ public:
}
~%%component_class%%()
~%%component_class%%() override
{
}


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h View File

@@ -7,7 +7,7 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::OpenGLAppComponent
class %%content_component_class%% : public juce::OpenGLAppComponent
{
public:
//==============================================================================
@@ -18,7 +18,7 @@ public:
setSize (800, 600);
}
~%%content_component_class%%()
~%%content_component_class%%() override
{
// This shuts down the GL system and stops the rendering calls.
shutdownOpenGL();


+ 2
- 2
extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h View File

@@ -7,12 +7,12 @@
This component lives inside our window, and this is where you should put all
your controls and content.
*/
class %%content_component_class%% : public juce::OpenGLAppComponent
class %%content_component_class%% : public juce::OpenGLAppComponent
{
public:
//==============================================================================
%%content_component_class%%();
~%%content_component_class%%();
~%%content_component_class%%() override;
//==============================================================================
void initialise() override;


+ 1
- 1
extras/Projucer/Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h View File

@@ -8,7 +8,7 @@ public:
{
}
~%%class_name%%()
~%%class_name%%() override
{
}


+ 3
- 3
extras/Projucer/Source/CodeEditor/jucer_DocumentEditorComponent.h View File

@@ -22,7 +22,7 @@
//==============================================================================
class DocumentEditorComponent : public Component,
public OpenDocumentManager::DocumentCloseListener
private OpenDocumentManager::DocumentCloseListener
{
public:
//==============================================================================
@@ -31,8 +31,6 @@ public:
OpenDocumentManager::Document* getDocument() const { return document; }
bool documentAboutToClose (OpenDocumentManager::Document*) override;
protected:
OpenDocumentManager::Document* document;
bool lastEditedState = false;
@@ -40,5 +38,7 @@ protected:
void setEditedState (bool hasBeenEdited);
private:
bool documentAboutToClose (OpenDocumentManager::Document*) override;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DocumentEditorComponent)
};

+ 6
- 6
extras/Projucer/Source/ComponentEditor/Components/jucer_GroupComponentHandler.h View File

@@ -165,7 +165,7 @@ private:
//==============================================================================
class GroupJustificationProperty : public JustificationProperty,
public ChangeListener
private ChangeListener
{
public:
GroupJustificationProperty (GroupComponent* const group_, JucerDocument& doc)
@@ -176,25 +176,25 @@ private:
document.addChangeListener (this);
}
~GroupJustificationProperty()
~GroupJustificationProperty() override
{
document.removeChangeListener (this);
}
void setJustification (Justification newJustification)
void setJustification (Justification newJustification) override
{
document.perform (new GroupJustifyChangeAction (group, *document.getComponentLayout(), newJustification),
"Change text label position");
}
Justification getJustification() const
Justification getJustification() const override
{
return group->getTextLabelPosition();
}
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
GroupComponent* const group;
JucerDocument& document;


+ 7
- 7
extras/Projucer/Source/ComponentEditor/Components/jucer_ImageButtonHandler.h View File

@@ -457,7 +457,7 @@ public:
}
class ImageButtonColourProperty : public JucerColourPropertyComponent,
public ChangeListener
private ChangeListener
{
public:
ImageButtonColourProperty (ComponentLayout& layout_, ImageButton* const owner_,
@@ -470,29 +470,29 @@ public:
layout_.getDocument()->addChangeListener (this);
}
~ImageButtonColourProperty()
~ImageButtonColourProperty() override
{
layout.getDocument()->removeChangeListener (this);
}
void setColour (Colour newColour)
void setColour (Colour newColour) override
{
setImageColour (layout, owner, role, newColour, true);
}
Colour getColour() const
Colour getColour() const override
{
return getImageColour (owner, role);
}
void resetToDefault() {}
void resetToDefault() override {}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
private:
ImageButton* const owner;
ComponentLayout& layout;
const ImageRole role;


+ 6
- 6
extras/Projucer/Source/ComponentEditor/Components/jucer_JucerComponentHandler.h View File

@@ -152,7 +152,7 @@ public:
private:
//==============================================================================
class JucerCompFileProperty : public FilePropertyComponent,
public ChangeListener
private ChangeListener
{
public:
JucerCompFileProperty (TestComponent* const comp, JucerDocument& doc)
@@ -163,29 +163,29 @@ private:
document.addChangeListener (this);
}
~JucerCompFileProperty()
~JucerCompFileProperty() override
{
document.removeChangeListener (this);
}
void setFile (const File& newFile)
void setFile (const File& newFile) override
{
setJucerComponentFile (document, component,
newFile.getRelativePathFrom (document.getCppFile().getParentDirectory())
.replaceCharacter ('\\', '/'));
}
File getFile() const
File getFile() const override
{
return component->findFile();
}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
private:
TestComponent* const component;
JucerDocument& document;
};


+ 30
- 30
extras/Projucer/Source/ComponentEditor/Components/jucer_LabelHandler.h View File

@@ -368,7 +368,7 @@ private:
//==============================================================================
class LabelJustificationProperty : public JustificationProperty,
public ChangeListener
private ChangeListener
{
public:
LabelJustificationProperty (Label* const label_, JucerDocument& doc)
@@ -379,25 +379,25 @@ private:
document.addChangeListener (this);
}
~LabelJustificationProperty()
~LabelJustificationProperty() override
{
document.removeChangeListener (this);
}
void setJustification (Justification newJustification)
void setJustification (Justification newJustification) override
{
document.perform (new LabelJustifyChangeAction (label, *document.getComponentLayout(), newJustification),
"Change Label justification");
}
Justification getJustification() const
Justification getJustification() const override
{
return label->getJustificationType();
}
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
Label* const label;
JucerDocument& document;
@@ -433,7 +433,7 @@ private:
//==============================================================================
class FontNameProperty : public FontPropertyComponent,
public ChangeListener
private ChangeListener
{
public:
FontNameProperty (Label* const label_, JucerDocument& doc)
@@ -444,25 +444,25 @@ private:
document.addChangeListener (this);
}
~FontNameProperty()
~FontNameProperty() override
{
document.removeChangeListener (this);
}
void setTypefaceName (const String& newFontName)
void setTypefaceName (const String& newFontName) override
{
document.perform (new FontNameChangeAction (label, *document.getComponentLayout(), newFontName),
"Change Label typeface");
}
String getTypefaceName() const
String getTypefaceName() const override
{
return label->getProperties().getWithDefault ("typefaceName", FontPropertyComponent::getDefaultFont());
}
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
Label* const label;
JucerDocument& document;
@@ -500,7 +500,7 @@ private:
//==============================================================================
class FontSizeProperty : public SliderPropertyComponent,
public ChangeListener
private ChangeListener
{
public:
FontSizeProperty (Label* const label_, JucerDocument& doc)
@@ -511,12 +511,12 @@ private:
document.addChangeListener (this);
}
~FontSizeProperty()
~FontSizeProperty() override
{
document.removeChangeListener (this);
}
void setValue (double newValue)
void setValue (double newValue) override
{
document.getUndoManager().undoCurrentTransactionOnly();
@@ -524,14 +524,14 @@ private:
"Change Label font size");
}
double getValue() const
double getValue() const override
{
return label->getFont().getHeight();
}
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
Label* const label;
JucerDocument& document;
@@ -571,7 +571,7 @@ private:
//==============================================================================
class FontStyleProperty : public ChoicePropertyComponent,
public ChangeListener
private ChangeListener
{
public:
FontStyleProperty (Label* const label_, JucerDocument& doc)
@@ -584,7 +584,7 @@ private:
updateStylesList (label->getFont());
}
~FontStyleProperty()
~FontStyleProperty() override
{
document.removeChangeListener (this);
}
@@ -611,7 +611,7 @@ private:
refresh();
}
void setIndex (int newIndex)
void setIndex (int newIndex) override
{
Font f (label->getFont());
@@ -632,7 +632,7 @@ private:
"Change Label font style");
}
int getIndex() const
int getIndex() const override
{
auto f = label->getFont();
@@ -652,12 +652,12 @@ private:
return typefaceIndex;
}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
updateStylesList (label->getFont());
}
private:
Label* const label;
JucerDocument& document;
@@ -693,7 +693,7 @@ private:
//==============================================================================
class FontKerningProperty : public SliderPropertyComponent,
public ChangeListener
private ChangeListener
{
public:
FontKerningProperty (Label* const label_, JucerDocument& doc)
@@ -704,12 +704,12 @@ private:
document.addChangeListener (this);
}
~FontKerningProperty()
~FontKerningProperty() override
{
document.removeChangeListener (this);
}
void setValue (double newValue)
void setValue (double newValue) override
{
document.getUndoManager().undoCurrentTransactionOnly();
@@ -717,17 +717,17 @@ private:
"Change Label font kerning");
}
double getValue() const
double getValue() const override
{
return label->getFont().getExtraKerningFactor();
}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
private:
Label* const label;
JucerDocument& document;


+ 15
- 15
extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h View File

@@ -523,7 +523,7 @@ private:
//==============================================================================
class TabDepthProperty : public SliderPropertyComponent,
public ChangeListener
private ChangeListener
{
public:
TabDepthProperty (TabbedComponent* comp, JucerDocument& doc)
@@ -534,12 +534,12 @@ private:
document.addChangeListener (this);
}
~TabDepthProperty()
~TabDepthProperty() override
{
document.removeChangeListener (this);
}
void setValue (double newValue)
void setValue (double newValue) override
{
document.getUndoManager().undoCurrentTransactionOnly();
@@ -547,20 +547,20 @@ private:
"Change TabComponent tab depth");
}
double getValue() const
double getValue() const override
{
return component->getTabBarDepth();
}
void changeListenerCallback (ChangeBroadcaster*)
{
refresh();
}
TabbedComponent* const component;
JucerDocument& document;
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
class TabDepthChangeAction : public ComponentUndoableAction<TabbedComponent>
{
public:
@@ -917,7 +917,7 @@ private:
//==============================================================================
class TabJucerFileProperty : public FilePropertyComponent,
public ChangeListener
private ChangeListener
{
public:
TabJucerFileProperty (TabbedComponent* const comp, JucerDocument& doc, const int tabIndex_)
@@ -929,13 +929,13 @@ private:
document.addChangeListener (this);
}
~TabJucerFileProperty()
~TabJucerFileProperty() override
{
document.removeChangeListener (this);
}
//==============================================================================
void setFile (const File& newFile)
void setFile (const File& newFile) override
{
document.perform (new JucerCompFileChangeAction (component, *document.getComponentLayout(), tabIndex,
newFile.getRelativePathFrom (document.getCppFile().getParentDirectory())
@@ -943,14 +943,14 @@ private:
"Change tab component file");
}
File getFile() const
File getFile() const override
{
return document.getCppFile().getSiblingFile (getTabJucerFile (component, tabIndex));
}
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
TabbedComponent* const component;
JucerDocument& document;
int tabIndex;


+ 12
- 11
extras/Projucer/Source/ComponentEditor/Components/jucer_ViewportHandler.h View File

@@ -351,7 +351,7 @@ private:
//==============================================================================
class ViewportScrollbarSizeProperty : public SliderPropertyComponent,
public ChangeListener
private ChangeListener
{
public:
ViewportScrollbarSizeProperty (Viewport* comp, JucerDocument& doc)
@@ -362,12 +362,12 @@ private:
document.addChangeListener (this);
}
~ViewportScrollbarSizeProperty()
~ViewportScrollbarSizeProperty() override
{
document.removeChangeListener (this);
}
void setValue (double newValue)
void setValue (double newValue) override
{
document.getUndoManager().undoCurrentTransactionOnly();
@@ -375,12 +375,13 @@ private:
"Change Viewport scrollbar size");
}
double getValue() const
double getValue() const override
{
return component->getScrollBarThickness();
}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
@@ -477,7 +478,7 @@ private:
//==============================================================================
class ViewportJucerFileProperty : public FilePropertyComponent,
public ChangeListener
private ChangeListener
{
public:
ViewportJucerFileProperty (Viewport* const comp, JucerDocument& doc)
@@ -488,12 +489,12 @@ private:
document.addChangeListener (this);
}
~ViewportJucerFileProperty()
~ViewportJucerFileProperty() override
{
document.removeChangeListener (this);
}
void setFile (const File& newFile)
void setFile (const File& newFile) override
{
document.perform (new JucerCompFileChangeAction (component, *document.getComponentLayout(),
newFile.getRelativePathFrom (document.getCppFile().getParentDirectory())
@@ -501,7 +502,7 @@ private:
"Change Projucer component file");
}
File getFile() const
File getFile() const override
{
auto filename = getViewportJucerComponentFile (component);
@@ -511,12 +512,12 @@ private:
return document.getCppFile().getSiblingFile (filename);
}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
private:
Viewport* const component;
JucerDocument& document;


+ 3
- 5
extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ElementSiblingComponent.h View File

@@ -18,7 +18,6 @@
#pragma once
//==============================================================================
class ElementSiblingComponent : public Component,
public ChangeListener
@@ -32,19 +31,18 @@ public:
owner->getDocument()->addChangeListener (this);
}
~ElementSiblingComponent()
~ElementSiblingComponent() override
{
owner->getDocument()->removeChangeListener (this);
}
virtual void updatePosition() = 0;
protected:
void changeListenerCallback (ChangeBroadcaster*)
void changeListenerCallback (ChangeBroadcaster*) override
{
updatePosition();
}
protected:
PaintElement* const owner;
};

+ 10
- 9
extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElement.h View File

@@ -31,8 +31,8 @@ class ElementSiblingComponent;
*/
class PaintElement : public Component,
public ChangeListener,
public ComponentBoundsConstrainer
public ComponentBoundsConstrainer,
private ChangeListener
{
public:
//==============================================================================
@@ -131,7 +131,7 @@ private:
//==============================================================================
template <typename ElementType>
class ElementListener : public ChangeListener
class ElementListener : private ChangeListener
{
public:
ElementListener (ElementType* e)
@@ -141,7 +141,7 @@ public:
broadcaster.addChangeListener (this);
}
~ElementListener()
~ElementListener() override
{
jassert (propToRefresh != nullptr);
broadcaster.removeChangeListener (this);
@@ -152,16 +152,17 @@ public:
propToRefresh = &pc;
}
void changeListenerCallback (ChangeBroadcaster*)
mutable Component::SafePointer<ElementType> owner;
ChangeBroadcaster& broadcaster;
PropertyComponent* propToRefresh;
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
jassert (propToRefresh != nullptr);
if (propToRefresh != nullptr && owner != nullptr)
propToRefresh->refresh();
}
mutable Component::SafePointer<ElementType> owner;
ChangeBroadcaster& broadcaster;
PropertyComponent* propToRefresh;
JUCE_DECLARE_NON_COPYABLE (ElementListener)
};

+ 12
- 12
extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp View File

@@ -91,7 +91,7 @@ private:
//==============================================================================
class PathWindingModeProperty : public ChoicePropertyComponent,
public ChangeListener
private ChangeListener
{
public:
explicit PathWindingModeProperty (PaintElementPath* const owner_)
@@ -104,17 +104,17 @@ public:
owner->getDocument()->addChangeListener (this);
}
~PathWindingModeProperty()
~PathWindingModeProperty() override
{
owner->getDocument()->removeChangeListener (this);
}
void setIndex (int newIndex) { owner->setNonZeroWinding (newIndex == 0, true); }
int getIndex() const { return owner->isNonZeroWinding() ? 0 : 1; }
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
void setIndex (int newIndex) override { owner->setNonZeroWinding (newIndex == 0, true); }
int getIndex() const override { return owner->isNonZeroWinding() ? 0 : 1; }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
PaintElementPath* const owner;
};
@@ -1174,7 +1174,7 @@ void PaintElementPath::setPoint (int index, int pointNumber, const RelativePosit
//==============================================================================
class PathPointTypeProperty : public ChoicePropertyComponent,
public ChangeListener
private ChangeListener
{
public:
PathPointTypeProperty (PaintElementPath* const owner_,
@@ -1191,12 +1191,12 @@ public:
owner->getDocument()->addChangeListener (this);
}
~PathPointTypeProperty()
~PathPointTypeProperty() override
{
owner->getDocument()->removeChangeListener (this);
}
void setIndex (int newIndex)
void setIndex (int newIndex) override
{
Path::Iterator::PathElementType type = Path::Iterator::startNewSubPath;
@@ -1213,7 +1213,7 @@ public:
owner->getPoint (index)->changePointType (type, area, true);
}
int getIndex() const
int getIndex() const override
{
const PathPoint* const p = owner->getPoint (index);
jassert (p != nullptr);
@@ -1231,12 +1231,12 @@ public:
return 0;
}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
private:
PaintElementPath* const owner;
const int index;
};


+ 6
- 6
extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementRoundedRectangle.h View File

@@ -204,7 +204,7 @@ private:
//==============================================================================
class CornerSizeProperty : public SliderPropertyComponent,
public ChangeListener
private juce::ChangeListener
{
public:
CornerSizeProperty (PaintElementRoundedRectangle* const owner_)
@@ -214,23 +214,23 @@ private:
owner->getDocument()->addChangeListener (this);
}
~CornerSizeProperty()
~CornerSizeProperty() override
{
owner->getDocument()->removeChangeListener (this);
}
void setValue (double newValue)
void setValue (double newValue) override
{
owner->getDocument()->getUndoManager().undoCurrentTransactionOnly();
owner->setCornerSize (newValue, true);
}
double getValue() const { return owner->getCornerSize(); }
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
double getValue() const override { return owner->getCornerSize(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
PaintElementRoundedRectangle* const owner;
};


+ 24
- 24
extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementText.h View File

@@ -387,7 +387,7 @@ private:
//==============================================================================
class TextProperty : public TextPropertyComponent,
public ChangeListener
private juce::ChangeListener
{
public:
TextProperty (PaintElementText* const e)
@@ -405,15 +405,15 @@ private:
void setText (const String& newText) override { element->setText (newText, true); }
String getText() const override { return element->getText(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
private:
PaintElementText* const element;
};
//==============================================================================
class FontNameProperty : public FontPropertyComponent,
public ChangeListener
private juce::ChangeListener
{
public:
FontNameProperty (PaintElementText* const e)
@@ -431,15 +431,15 @@ private:
void setTypefaceName (const String& newFontName) { element->setTypefaceName (newFontName, true); }
String getTypefaceName() const { return element->getTypefaceName(); }
private:
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
PaintElementText* const element;
};
//==============================================================================
class FontStyleProperty : public ChoicePropertyComponent,
public ChangeListener
private juce::ChangeListener
{
public:
FontStyleProperty (PaintElementText* const e)
@@ -518,18 +518,18 @@ private:
return typefaceIndex;
}
private:
void changeListenerCallback (ChangeBroadcaster*)
{
updateStylesList (element->getTypefaceName());
}
private:
PaintElementText* const element;
};
//==============================================================================
class FontSizeProperty : public SliderPropertyComponent,
public ChangeListener
private juce::ChangeListener
{
public:
FontSizeProperty (PaintElementText* const e)
@@ -539,12 +539,12 @@ private:
element->getDocument()->addChangeListener (this);
}
~FontSizeProperty()
~FontSizeProperty() override
{
element->getDocument()->removeChangeListener (this);
}
void setValue (double newValue)
void setValue (double newValue) override
{
element->getDocument()->getUndoManager().undoCurrentTransactionOnly();
@@ -554,20 +554,20 @@ private:
element->setFont (f, true);
}
double getValue() const
double getValue() const override
{
return element->getFont().getHeight();
}
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
PaintElementText* const element;
};
//==============================================================================
class FontKerningProperty : public SliderPropertyComponent,
public ChangeListener
private juce::ChangeListener
{
public:
FontKerningProperty (PaintElementText* const e)
@@ -577,12 +577,12 @@ private:
element->getDocument()->addChangeListener (this);
}
~FontKerningProperty()
~FontKerningProperty() override
{
element->getDocument()->removeChangeListener (this);
}
void setValue (double newValue)
void setValue (double newValue) override
{
element->getDocument()->getUndoManager().undoCurrentTransactionOnly();
@@ -592,23 +592,23 @@ private:
element->setFont (f, true);
}
double getValue() const
double getValue() const override
{
return element->getFont().getExtraKerningFactor();
}
void changeListenerCallback (ChangeBroadcaster*)
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
private:
PaintElementText* const element;
};
//==============================================================================
class TextJustificationProperty : public JustificationProperty,
public ChangeListener
private juce::ChangeListener
{
public:
TextJustificationProperty (PaintElementText* const e)
@@ -618,24 +618,24 @@ private:
element->getDocument()->addChangeListener (this);
}
~TextJustificationProperty()
~TextJustificationProperty() override
{
element->getDocument()->removeChangeListener (this);
}
void setJustification (Justification newJustification)
void setJustification (Justification newJustification) override
{
element->setJustification (newJustification, true);
}
Justification getJustification() const
Justification getJustification() const override
{
return element->getJustification();
}
void changeListenerCallback (ChangeBroadcaster*) { refresh(); }
private:
void changeListenerCallback (ChangeBroadcaster*) override { refresh(); }
PaintElementText* const element;
};


+ 9
- 9
extras/Projucer/Source/ComponentEditor/Properties/jucer_ColourPropertyComponent.h View File

@@ -41,7 +41,7 @@ public:
}
class ColourEditorComponent : public Component,
public ChangeListener
private ChangeListener
{
public:
ColourEditorComponent (const bool canReset)
@@ -86,14 +86,6 @@ public:
getScreenBounds(), nullptr);
}
void changeListenerCallback (ChangeBroadcaster* source) override
{
const ColourSelector* const cs = (const ColourSelector*) source;
if (cs->getCurrentColour() != getColour())
setColour (cs->getCurrentColour());
}
class ColourSelectorComp : public Component
{
public:
@@ -166,6 +158,14 @@ public:
};
private:
void changeListenerCallback (ChangeBroadcaster* source) override
{
const ColourSelector* const cs = (const ColourSelector*) source;
if (cs->getCurrentColour() != getColour())
setColour (cs->getCurrentColour());
}
Colour colour;
bool canResetToDefault;
};


+ 4
- 4
extras/Projucer/Source/ComponentEditor/Properties/jucer_FilePropertyComponent.h View File

@@ -21,7 +21,7 @@
//==============================================================================
class FilePropertyComponent : public PropertyComponent,
public FilenameComponentListener
private FilenameComponentListener
{
public:
FilePropertyComponent (const String& name,
@@ -40,17 +40,17 @@ public:
virtual void setFile (const File& newFile) = 0;
virtual File getFile() const = 0;
void refresh()
void refresh() override
{
filenameComp.setCurrentFile (getFile(), false);
}
void filenameComponentChanged (FilenameComponent*)
private:
void filenameComponentChanged (FilenameComponent*) override
{
if (getFile() != filenameComp.getCurrentFile())
setFile (filenameComp.getCurrentFile());
}
private:
FilenameComponent filenameComp;
};

+ 4
- 3
extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.h View File

@@ -24,10 +24,10 @@
//==============================================================================
class ComponentLayoutEditor : public Component,
public ChangeListener,
public FileDragAndDropTarget,
public DragAndDropTarget,
public LassoSource<Component*>
public LassoSource<Component*>,
private ChangeListener
{
public:
//==============================================================================
@@ -38,7 +38,6 @@ public:
void paint (Graphics&) override;
void resized() override;
void visibilityChanged() override;
void changeListenerCallback (ChangeBroadcaster*) override;
void mouseDown (const MouseEvent&) override;
void mouseDrag (const MouseEvent&) override;
@@ -68,6 +67,8 @@ public:
Image createComponentLayerSnapshot() const;
private:
void changeListenerCallback (ChangeBroadcaster*) override;
JucerDocument& document;
ComponentLayout& layout;
Component* subCompHolder;


+ 8
- 8
extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h View File

@@ -58,7 +58,7 @@ public:
private:
class LayoutPropsPanel : public Component,
public ChangeListener
private ChangeListener
{
public:
LayoutPropsPanel (JucerDocument& doc, ComponentLayout& l)
@@ -68,22 +68,17 @@ private:
addAndMakeVisible (propsPanel);
}
~LayoutPropsPanel()
~LayoutPropsPanel() override
{
layout.getSelectedSet().removeChangeListener (this);
clear();
}
void resized()
void resized() override
{
propsPanel.setBounds (4, 4, getWidth() - 8, getHeight() - 8);
}
void changeListenerCallback (ChangeBroadcaster*)
{
updateList();
}
void clear()
{
propsPanel.clear();
@@ -104,6 +99,11 @@ private:
}
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
updateList();
}
JucerDocument& document;
ComponentLayout& layout;
PropertyPanel propsPanel;


+ 11
- 11
extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.h View File

@@ -22,9 +22,9 @@
//==============================================================================
class ComponentOverlayComponent : public Component,
public ComponentListener,
public ChangeListener,
public ComponentBoundsConstrainer
private ComponentBoundsConstrainer,
private ComponentListener,
private ChangeListener
{
public:
//==============================================================================
@@ -44,15 +44,16 @@ public:
void mouseDrag (const MouseEvent&) override;
void mouseUp (const MouseEvent&) override;
void componentMovedOrResized (Component&, bool wasMoved, bool wasResized) override;
void updateBoundsToMatchTarget();
void changeListenerCallback (ChangeBroadcaster*) override;
//==============================================================================
Component::SafePointer<Component> target;
const int borderThickness;
private:
void resizeStart() override;
void resizeEnd() override;
void updateBoundsToMatchTarget();
void checkBounds (Rectangle<int>& bounds,
const Rectangle<int>& previousBounds,
const Rectangle<int>& limits,
@@ -63,11 +64,10 @@ public:
void applyBoundsToComponent (Component&, Rectangle<int>) override;
//==============================================================================
Component::SafePointer<Component> target;
const int borderThickness;
void componentMovedOrResized (Component&, bool wasMoved, bool wasResized) override;
void changeListenerCallback (ChangeBroadcaster*) override;
private:
std::unique_ptr<ResizableBorderComponent> border;
ComponentLayout& layout;


+ 2
- 2
extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.cpp View File

@@ -32,7 +32,7 @@
//==============================================================================
class ExtraMethodsList : public PropertyComponent,
public ListBoxModel,
public ChangeListener
private ChangeListener
{
public:
ExtraMethodsList (JucerDocument& doc)
@@ -112,12 +112,12 @@ public:
listBox->repaint();
}
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
refresh();
}
private:
JucerDocument& document;
std::unique_ptr<ListBox> listBox;


+ 3
- 2
extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.h View File

@@ -26,7 +26,7 @@
//==============================================================================
class JucerDocumentEditor : public Component,
public ApplicationCommandTarget,
public ChangeListener
private ChangeListener
{
public:
//==============================================================================
@@ -49,7 +49,6 @@ public:
//==============================================================================
void paint (Graphics& g) override;
void resized() override;
void changeListenerCallback (ChangeBroadcaster*) override;
bool keyPressed (const KeyPress&) override;
//==============================================================================
@@ -61,6 +60,8 @@ public:
static JucerDocumentEditor* getActiveDocumentHolder();
private:
void changeListenerCallback (ChangeBroadcaster*) override;
std::unique_ptr<JucerDocument> document;
ComponentLayoutPanel* compLayoutPanel = nullptr;


+ 2
- 2
extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h View File

@@ -25,9 +25,9 @@ class JucerDocumentEditor;
//==============================================================================
class PaintRoutineEditor : public Component,
public ChangeListener,
public LassoSource <PaintElement*>,
public FileDragAndDropTarget
public FileDragAndDropTarget,
private ChangeListener
{
public:
//==============================================================================


+ 8
- 8
extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp View File

@@ -61,7 +61,7 @@ protected:
//==============================================================================
class GraphicsPropsPanel : public Component,
public ChangeListener
private ChangeListener
{
public:
GraphicsPropsPanel (PaintRoutine& paintRoutine_,
@@ -75,7 +75,7 @@ public:
addAndMakeVisible (propsPanel = new PropertyPanel());
}
~GraphicsPropsPanel()
~GraphicsPropsPanel() override
{
paintRoutine.getSelectedPoints().removeChangeListener (this);
paintRoutine.getSelectedElements().removeChangeListener (this);
@@ -84,16 +84,11 @@ public:
deleteAllChildren();
}
void resized()
void resized() override
{
propsPanel->setBounds (4, 4, getWidth() - 8, getHeight() - 8);
}
void changeListenerCallback (ChangeBroadcaster*)
{
updateList();
}
void clear()
{
propsPanel->clear();
@@ -145,6 +140,11 @@ public:
}
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
updateList();
}
PaintRoutine& paintRoutine;
JucerDocument* document;


+ 1
- 1
extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp View File

@@ -18,7 +18,7 @@
#include "../Application/jucer_Headers.h"
#include "../Application/jucer_Application.h"
#include "../Wizards/jucer_NewFileWizard.h"
#include "../Utility/Helpers/jucer_NewFileWizard.h"
#include "jucer_JucerDocument.h"
#include "jucer_ObjectTypes.h"
#include "UI/jucer_JucerDocumentEditor.h"


+ 3
- 3
extras/Projucer/Source/Project/UI/Sidebar/jucer_ExporterTreeItems.h View File

@@ -39,7 +39,7 @@ public:
bool mightContainSubItems() override { return exporter->getNumConfigurations() > 0; }
String getUniqueName() const override { return "exporter_" + String (exporterIndex); }
String getRenamingName() const override { return getDisplayName(); }
String getDisplayName() const override { return exporter->getName(); }
String getDisplayName() const override { return exporter->getUniqueName(); }
void setName (const String&) override {}
bool isMissing() const override { return false; }
String getTooltip() override { return getDisplayName(); }
@@ -172,7 +172,7 @@ private:
struct SettingsComp : public Component
{
SettingsComp (ProjectExporter& exp)
: group (exp.getName(),
: group (exp.getUniqueName(),
ExporterItem::getIconForExporter (&exp),
exp.getDescription())
{
@@ -269,7 +269,7 @@ private:
{
public:
SettingsComp (ProjectExporter::BuildConfiguration& conf)
: group (conf.exporter.getName() + " - " + conf.getName(), Icon (getIcons().config, Colours::transparentBlack))
: group (conf.exporter.getUniqueName() + " - " + conf.getName(), Icon (getIcons().config, Colours::transparentBlack))
{
addAndMakeVisible (group);


+ 12
- 12
extras/Projucer/Source/Project/UI/Sidebar/jucer_FileTreeItems.h View File

@@ -21,7 +21,7 @@
//==============================================================================
class FileTreeItemBase : public JucerTreeViewBase,
public ValueTree::Listener
private ValueTree::Listener
{
public:
FileTreeItemBase (const Project::Item& projectItem)
@@ -227,17 +227,6 @@ public:
return nullptr;
}
//==============================================================================
void valueTreePropertyChanged (ValueTree& tree, const Identifier&) override
{
if (tree == item.state)
repaintItem();
}
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { treeChildrenChanged (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { treeChildrenChanged (parentTree); }
//==============================================================================
bool mightContainSubItems() override { return item.getNumChildren() > 0; }
String getUniqueName() const override { jassert (item.getID().isNotEmpty()); return item.getID(); }
@@ -340,6 +329,17 @@ public:
Project::Item item;
protected:
//==============================================================================
void valueTreePropertyChanged (ValueTree& tree, const Identifier&) override
{
if (tree == item.state)
repaintItem();
}
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&, int) override { treeChildrenChanged (parentTree); }
void valueTreeChildOrderChanged (ValueTree& parentTree, int, int) override { treeChildrenChanged (parentTree); }
bool isFileMissing;
virtual FileTreeItemBase* createSubItem (const Project::Item& node) = 0;


+ 2
- 2
extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h View File

@@ -158,7 +158,7 @@ private:
exporterModulePathValues.add (defaultValue.getPropertyAsValue());
auto pathComponent = std::make_unique<FilePathPropertyComponent> (defaultValue,
"Path for " + exporter->getName().quoted(),
"Path for " + exporter->getUniqueName().quoted(),
true,
exporter->getTargetOSForExporter() == TargetOS::getThisOS(),
"*",
@@ -168,7 +168,7 @@ private:
props.add (pathComponent.release(),
"A path to the folder that contains the " + moduleID + " module when compiling the "
+ exporter->getName().quoted() + " target. "
+ exporter->getUniqueName().quoted() + " target. "
"This can be an absolute path, or relative to the jucer project folder, but it "
"must be valid on the filesystem of the target machine that will be performing this build. If this "
"is empty then the global path will be used.");


+ 1
- 1
extras/Projucer/Source/Project/UI/Sidebar/jucer_TreeItemTypes.h View File

@@ -21,7 +21,7 @@
#include "../../../ProjectSaving/jucer_ProjectExporter.h"
#include "../../../Application/Windows/jucer_TranslationToolWindowComponent.h"
#include "../../../Utility/UI/jucer_JucerTreeViewBase.h"
#include "../../../Wizards/jucer_NewFileWizard.h"
#include "../../../Utility/Helpers/jucer_NewFileWizard.h"
#include "../jucer_ContentViewComponents.h"
#include "../jucer_FileGroupInformationComponent.h"
#include "../jucer_ModulesInformationComponent.h"


+ 10
- 8
extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp View File

@@ -157,12 +157,14 @@ void HeaderComponent::updateExporters()
int i = 0;
for (Project::ExporterIterator exporter (*project); exporter.next(); ++i)
{
exporterBox.addItem (exporter->getName(), i + 1);
auto exporterName = exporter->getUniqueName();
if (selectedExporter != nullptr && exporter->getName() == selectedExporter->getName())
exporterBox.addItem (exporterName, i + 1);
if (selectedExporter != nullptr && exporterName == selectedExporter->getUniqueName())
exporterBox.setSelectedId (i + 1);
if (exporter->getName().contains (ProjectExporter::getCurrentPlatformExporterName()) && preferredExporterIndex == -1)
if (exporterName.contains (ProjectExporter::getCurrentPlatformExporterTypeInfo().displayName) && preferredExporterIndex == -1)
preferredExporterIndex = i;
}
@@ -209,7 +211,7 @@ bool HeaderComponent::canCurrentExporterLaunchProject() const
if (auto selectedExporter = getSelectedExporter())
{
for (Project::ExporterIterator exporter (*project); exporter.next();)
if (exporter->canLaunchProject() && exporter->getName() == selectedExporter->getName())
if (exporter->canLaunchProject() && exporter->getUniqueName() == selectedExporter->getUniqueName())
return true;
}
}
@@ -305,13 +307,13 @@ void HeaderComponent::updateExporterButton()
{
if (auto selectedExporter = getSelectedExporter())
{
auto selectedName = selectedExporter->getName();
auto selectedName = selectedExporter->getUniqueName();
for (auto info : ProjectExporter::getExporterTypes())
for (auto info : ProjectExporter::getExporterTypeInfos())
{
if (selectedName.contains (info.name))
if (selectedName.contains (info.displayName))
{
saveAndOpenInIDEButton.setImage (info.getIcon());
saveAndOpenInIDEButton.setImage (info.icon);
saveAndOpenInIDEButton.repaint();
saveAndOpenInIDEButton.setEnabled (canCurrentExporterLaunchProject());
}


+ 2
- 2
extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h View File

@@ -298,7 +298,7 @@ private:
modulePathClipboard.clear();
for (Project::ExporterIterator exporter (project); exporter.next();)
modulePathClipboard[exporter->getName()] = exporter->getPathForModuleValue (moduleToCopy).get();
modulePathClipboard[exporter->getUniqueName()] = exporter->getPathForModuleValue (moduleToCopy).get();
list.repaint();
}));
@@ -313,7 +313,7 @@ private:
auto modID = project.getEnabledModules().getModuleID (rowNumber);
for (Project::ExporterIterator exporter (project); exporter.next();)
exporter->getPathForModuleValue (modID) = modulePathClipboard[exporter->getName()];
exporter->getPathForModuleValue (modID) = modulePathClipboard[exporter->getUniqueName()];
}
list.repaint();


+ 25
- 22
extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp View File

@@ -570,7 +570,7 @@ void ProjectContentComponent::showProjectSettings()
void ProjectContentComponent::showCurrentExporterSettings()
{
if (auto selected = headerComponent.getSelectedExporter())
showExporterSettings (selected->getName());
showExporterSettings (selected->getUniqueName());
}
void ProjectContentComponent::showExporterSettings (const String& exporterName)
@@ -638,7 +638,7 @@ StringArray ProjectContentComponent::getExportersWhichCanLaunch() const
if (project != nullptr)
for (Project::ExporterIterator exporter (*project); exporter.next();)
if (exporter->canLaunchProject())
s.add (exporter->getName());
s.add (exporter->getUniqueName());
return s;
}
@@ -650,20 +650,6 @@ void ProjectContentComponent::openInSelectedIDE (bool saveFirst)
project->openProjectInIDE (*selectedExporter, saveFirst);
}
static void newExporterMenuCallback (int result, ProjectContentComponent* comp)
{
if (comp != nullptr && result > 0)
{
if (auto* p = comp->getProject())
{
auto exporterName= ProjectExporter::getExporterNames() [result - 1];
if (exporterName.isNotEmpty())
p->addNewExporter (exporterName);
}
}
}
void ProjectContentComponent::showNewExporterMenu()
{
if (project != nullptr)
@@ -672,17 +658,34 @@ void ProjectContentComponent::showNewExporterMenu()
menu.addSectionHeader ("Create a new export target:");
auto exporters = ProjectExporter::getExporterTypes();
SafePointer<ProjectContentComponent> safeThis (this);
for (int i = 0; i < exporters.size(); ++i)
for (auto& exporterInfo : ProjectExporter::getExporterTypeInfos())
{
auto& type = exporters.getReference(i);
PopupMenu::Item item;
item.itemID = -1;
item.text = exporterInfo.displayName;
item.image = [exporterInfo]
{
auto drawableImage = std::make_unique<DrawableImage>();
drawableImage->setImage (exporterInfo.icon);
return drawableImage;
}();
item.action = [safeThis, exporterInfo]
{
if (safeThis != nullptr)
if (auto* p = safeThis->getProject())
p->addNewExporter (exporterInfo.identifier);
};
menu.addItem (i + 1, type.name, true, false, type.getIcon());
menu.addItem (item);
}
menu.showMenuAsync (PopupMenu::Options(),
ModalCallbackFunction::forComponent (newExporterMenuCallback, this));
menu.showMenuAsync ({});
}
}


+ 5
- 4
extras/Projucer/Source/Project/UI/jucer_ProjectMessagesComponent.h View File

@@ -470,7 +470,7 @@ public:
private:
//==============================================================================
struct MessageCountComponent : public Component,
public ValueTree::Listener
private ValueTree::Listener
{
MessageCountComponent (ProjectMessagesComponent& o, Path pathToUse)
: owner (o),
@@ -500,15 +500,16 @@ private:
updateNumMessages();
}
void valueTreeChildAdded (ValueTree&, ValueTree&) override { updateNumMessages(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { updateNumMessages(); }
void updateNumMessages()
{
numMessages = messagesTree.getNumChildren();
repaint();
}
private:
void valueTreeChildAdded (ValueTree&, ValueTree&) override { updateNumMessages(); }
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override { updateNumMessages(); }
ProjectMessagesComponent& owner;
ValueTree messagesTree;


+ 10
- 23
extras/Projucer/Source/Project/jucer_Project.cpp View File

@@ -693,7 +693,7 @@ Result Project::openProjectInIDE (ProjectExporter& exporterToOpen, bool saveFirs
{
for (ExporterIterator exporter (*this); exporter.next();)
{
if (exporter->canLaunchProject() && exporter->getName() == exporterToOpen.getName())
if (exporter->canLaunchProject() && exporter->getUniqueName() == exporterToOpen.getUniqueName())
{
if (isTemporaryProject())
{
@@ -2375,18 +2375,18 @@ int Project::getNumExporters()
return getExporters().getNumChildren();
}
ProjectExporter* Project::createExporter (int index)
std::unique_ptr<ProjectExporter> Project::createExporter (int index)
{
jassert (index >= 0 && index < getNumExporters());
return ProjectExporter::createExporter (*this, getExporters().getChild (index));
return ProjectExporter::createExporterFromSettings (*this, getExporters().getChild (index));
}
void Project::addNewExporter (const String& exporterName)
void Project::addNewExporter (const Identifier& exporterIdentifier)
{
std::unique_ptr<ProjectExporter> exp (ProjectExporter::createNewExporter (*this, exporterName));
std::unique_ptr<ProjectExporter> exp (ProjectExporter::createNewExporter (*this, exporterIdentifier));
exp->getTargetLocationValue() = exp->getTargetLocationString()
+ getUniqueTargetFolderSuffixForExporter (exp->getName(), exp->getTargetLocationString());
+ getUniqueTargetFolderSuffixForExporter (exporterIdentifier, exp->getTargetLocationString());
auto exportersTree = getExporters();
exportersTree.appendChild (exp->settings, getUndoManagerFor (exportersTree));
@@ -2394,21 +2394,20 @@ void Project::addNewExporter (const String& exporterName)
void Project::createExporterForCurrentPlatform()
{
addNewExporter (ProjectExporter::getCurrentPlatformExporterName());
addNewExporter (ProjectExporter::getCurrentPlatformExporterTypeInfo().identifier);
}
String Project::getUniqueTargetFolderSuffixForExporter (const String& exporterName, const String& base)
String Project::getUniqueTargetFolderSuffixForExporter (const Identifier& exporterIdentifier, const String& base)
{
StringArray buildFolders;
auto exportersTree = getExporters();
auto type = ProjectExporter::getValueTreeNameForExporter (exporterName);
for (int i = 0; i < exportersTree.getNumChildren(); ++i)
{
auto exporterNode = exportersTree.getChild (i);
if (exporterNode.getType() == Identifier (type))
if (exporterNode.getType() == exporterIdentifier)
buildFolders.add (exporterNode.getProperty ("targetFolder").toString());
}
@@ -2430,18 +2429,6 @@ String Project::getUniqueTargetFolderSuffixForExporter (const String& exporterNa
}
//==============================================================================
String Project::getFileTemplate (const String& templateName)
{
int dataSize;
if (auto* data = BinaryData::getNamedResource (templateName.toUTF8(), dataSize))
return String::fromUTF8 (data, dataSize);
jassertfalse;
return {};
}
StringPairArray Project::getAppConfigDefs()
{
StringPairArray result;
@@ -2598,7 +2585,7 @@ bool Project::ExporterIterator::next()
if (++index >= project.getNumExporters())
return false;
exporter.reset (project.createExporter (index));
exporter = project.createExporter (index);
if (exporter == nullptr)
{


+ 10
- 13
extras/Projucer/Source/Project/jucer_Project.h View File

@@ -104,7 +104,7 @@ namespace ProjectMessages
//==============================================================================
class Project : public FileBasedDocument,
public ValueTree::Listener,
private ValueTree::Listener,
private LicenseController::LicenseStateListener,
private ChangeListener,
private AvailableModulesList::Listener
@@ -416,8 +416,8 @@ public:
//==============================================================================
ValueTree getExporters();
int getNumExporters();
ProjectExporter* createExporter (int index);
void addNewExporter (const String& exporterName);
std::unique_ptr<ProjectExporter> createExporter (int index);
void addNewExporter (const Identifier& exporterIdentifier);
void createExporterForCurrentPlatform();
struct ExporterIterator
@@ -456,18 +456,9 @@ public:
std::pair<String, File> getModuleWithID (const String&);
//==============================================================================
String getFileTemplate (const String& templateName);
//==============================================================================
PropertiesFile& getStoredProperties() const;
//==============================================================================
void valueTreePropertyChanged (ValueTree&, const Identifier&) override;
void valueTreeChildAdded (ValueTree&, ValueTree&) override;
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override;
void valueTreeChildOrderChanged (ValueTree&, int, int) override;
//==============================================================================
UndoManager* getUndoManagerFor (const ValueTree&) const { return nullptr; }
UndoManager* getUndoManager() const { return nullptr; }
@@ -480,7 +471,7 @@ public:
void writeProjectFile();
//==============================================================================
String getUniqueTargetFolderSuffixForExporter (const String& exporterName, const String& baseTargetFolder);
String getUniqueTargetFolderSuffixForExporter (const Identifier& exporterIdentifier, const String& baseTargetFolder);
//==============================================================================
bool isCurrentlySaving() const noexcept { return isSaving; }
@@ -505,6 +496,12 @@ public:
bool isSaveAndExportDisabled() const;
private:
//==============================================================================
void valueTreePropertyChanged (ValueTree&, const Identifier&) override;
void valueTreeChildAdded (ValueTree&, ValueTree&) override;
void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override;
void valueTreeChildOrderChanged (ValueTree&, int, int) override;
//==============================================================================
struct ProjectFileModificationPoller : private Timer
{


+ 9
- 18
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h View File

@@ -63,17 +63,19 @@ public:
createOtherExporterProperties (props);
}
static const char* getName() { return "Android"; }
static const char* getValueTreeTypeName() { return "ANDROIDSTUDIO"; }
static const char* getDefaultActivityClass() { return "com.rmsl.juce.JuceActivity"; }
static const char* getDefaultApplicationClass() { return "com.rmsl.juce.JuceApp"; }
static String getDisplayName() { return "Android"; }
static String getValueTreeTypeName() { return "ANDROIDSTUDIO"; }
static String getTargetFolderName() { return "Android"; }
static const char* getDefaultActivityClass() { return "com.rmsl.juce.JuceActivity"; }
static const char* getDefaultApplicationClass() { return "com.rmsl.juce.JuceApp"; }
static AndroidProjectExporter* createForSettings (Project& projectToUse, const ValueTree& settingsToUse)
{
if (settingsToUse.hasType (getValueTreeTypeName()))
return new AndroidProjectExporter (projectToUse, settingsToUse);
return nullptr;
return {};
}
//==============================================================================
@@ -127,9 +129,8 @@ public:
androidPluginVersion (settings, Ids::androidPluginVersion, getUndoManager(), "3.5.3"),
AndroidExecutable (getAppSettings().getStoredPath (Ids::androidStudioExePath, TargetOS::getThisOS()).get().toString())
{
name = getName();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderForExporter (getValueTreeTypeName()));
name = getDisplayName();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderName());
}
//==============================================================================
@@ -1871,13 +1872,3 @@ private:
JUCE_DECLARE_NON_COPYABLE (AndroidProjectExporter)
};
inline ProjectExporter* createAndroidExporter (Project& p, const ValueTree& t)
{
return new AndroidProjectExporter (p, t);
}
inline ProjectExporter* createAndroidExporterForSetting (Project& p, const ValueTree& t)
{
return AndroidProjectExporter::createForSettings (p, t);
}

+ 14
- 14
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h View File

@@ -46,8 +46,9 @@ protected:
public:
//==============================================================================
static const char* getName() { return "CLion (beta)"; }
static const char* getValueTreeTypeName() { return "CLION"; }
static String getDisplayName() { return "CLion (beta)"; }
static String getValueTreeTypeName() { return "CLION"; }
static String getTargetFolderName() { return "CLion"; }
static CLionProjectExporter* createForSettings (Project& projectToUse, const ValueTree& settingsToUse)
{
@@ -67,9 +68,8 @@ public:
//==============================================================================
CLionProjectExporter (Project& p, const ValueTree& t) : ProjectExporter (p, t)
{
name = getName();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderForExporter (getValueTreeTypeName()));
name = getDisplayName();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderName());
}
//==============================================================================
@@ -98,11 +98,11 @@ public:
bool canLaunchProject() override
{
#if JUCE_MAC
static Identifier exporterName ("XCODE_MAC");
static Identifier exporterName (XcodeProjectExporter::getValueTreeTypeNameMac());
#elif JUCE_WINDOWS
static Identifier exporterName ("CODEBLOCKS_WINDOWS");
static Identifier exporterName (CodeBlocksProjectExporter::getValueTreeTypeNameWindows());
#elif JUCE_LINUX
static Identifier exporterName ("LINUX_MAKE");
static Identifier exporterName (MakefileProjectExporter::getValueTreeTypeName());
#else
static Identifier exporterName;
#endif
@@ -122,19 +122,19 @@ public:
{
String description;
description << "The " << getName() << " exporter produces a single CMakeLists.txt file with "
description << "The " << getDisplayName() << " exporter produces a single CMakeLists.txt file with "
<< "multiple platform dependent sections, where the configuration for each section "
<< "is inherited from other exporters added to this project." << newLine
<< newLine
<< "The exporters which provide the CLion configuration for the corresponding platform are:" << newLine
<< newLine;
for (auto& exporterName : getExporterNames())
for (auto& exporterInfo : getExporterTypeInfos())
{
std::unique_ptr<ProjectExporter> exporter (createNewExporter (getProject(), exporterName));
std::unique_ptr<ProjectExporter> exporter (createNewExporter (getProject(), exporterInfo.identifier));
if (isExporterSupported (*exporter))
description << exporter->getName() << newLine;
description << exporterInfo.displayName << newLine;
}
description << newLine
@@ -151,7 +151,7 @@ public:
{
for (Project::ExporterIterator exporter (getProject()); exporter.next();)
if (isExporterSupported (*exporter))
properties.add (new BooleanPropertyComponent (getExporterEnabledValue (*exporter), "Import settings from exporter", exporter->getName()),
properties.add (new BooleanPropertyComponent (getExporterEnabledValue (*exporter), "Import settings from exporter", exporter->getUniqueName()),
"If this is enabled then settings from the corresponding exporter will "
"be used in the generated CMakeLists.txt");
}
@@ -195,7 +195,7 @@ public:
out.setNewLineString ("\n");
out << "###############################################################################" << newLine
<< "# " << exporter->getName() << newLine
<< "# " << exporter->getUniqueName() << newLine
<< "###############################################################################" << newLine
<< newLine;


+ 17
- 27
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h View File

@@ -31,39 +31,24 @@ public:
};
//==============================================================================
static const char* getNameWindows() noexcept { return "Code::Blocks (Windows)"; }
static const char* getNameLinux() noexcept { return "Code::Blocks (Linux)"; }
static String getDisplayNameWindows() { return "Code::Blocks (Windows)"; }
static String getDisplayNameLinux() { return "Code::Blocks (Linux)"; }
static const char* getName (CodeBlocksOS os) noexcept
{
if (os == windowsTarget) return getNameWindows();
if (os == linuxTarget) return getNameLinux();
// currently no other OSes supported by Codeblocks exporter!
jassertfalse;
return "Code::Blocks (Unknown OS)";
}
static String getValueTreeTypeNameWindows() { return "CODEBLOCKS_WINDOWS"; }
static String getValueTreeTypeNameLinux() { return "CODEBLOCKS_LINUX"; }
//==============================================================================
static const char* getValueTreeTypeName (CodeBlocksOS os)
{
if (os == windowsTarget) return "CODEBLOCKS_WINDOWS";
if (os == linuxTarget) return "CODEBLOCKS_LINUX";
// currently no other OSes supported by Codeblocks exporter!
jassertfalse;
return "CODEBLOCKS_UNKNOWN_OS";
}
static String getTargetFolderNameWindows() { return "CodeBlocksWindows"; }
static String getTargetFolderNameLinux() { return "CodeBlocksLinux"; }
//==============================================================================
static CodeBlocksProjectExporter* createForSettings (Project& projectToUse, const ValueTree& settingsToUse)
{
// this will also import legacy jucer files where CodeBlocks only worked for Windows,
// had valueTreetTypeName "CODEBLOCKS", and there was no OS distinction
if (settingsToUse.hasType (getValueTreeTypeName (windowsTarget)) || settingsToUse.hasType ("CODEBLOCKS"))
if (settingsToUse.hasType (getValueTreeTypeNameWindows()) || settingsToUse.hasType ("CODEBLOCKS"))
return new CodeBlocksProjectExporter (projectToUse, settingsToUse, windowsTarget);
if (settingsToUse.hasType (getValueTreeTypeName (linuxTarget)))
if (settingsToUse.hasType (getValueTreeTypeNameLinux()))
return new CodeBlocksProjectExporter (projectToUse, settingsToUse, linuxTarget);
return nullptr;
@@ -73,12 +58,17 @@ public:
CodeBlocksProjectExporter (Project& p, const ValueTree& t, CodeBlocksOS codeBlocksOs)
: ProjectExporter (p, t), os (codeBlocksOs)
{
name = getName (os);
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderForExporter (getValueTreeTypeName (os)));
if (isWindows())
{
name = getDisplayNameWindows();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderNameWindows());
targetPlatformValue.referTo (settings, Ids::codeBlocksWindowsTarget, getUndoManager());
}
else
{
name = getDisplayNameLinux();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderNameLinux());
}
}
//==============================================================================


+ 18
- 12
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h View File

@@ -1615,16 +1615,18 @@ class MSVCProjectExporterVC2015 : public MSVCProjectExporterBase
{
public:
MSVCProjectExporterVC2015 (Project& p, const ValueTree& t)
: MSVCProjectExporterBase (p, t, getTargetFolderForExporter (getValueTreeTypeName()))
: MSVCProjectExporterBase (p, t, getTargetFolderName())
{
name = getName();
name = getDisplayName();
targetPlatformVersion.setDefault (getDefaultWindowsTargetPlatformVersion());
platformToolsetValue.setDefault (getDefaultToolset());
}
static const char* getName() { return "Visual Studio 2015"; }
static const char* getValueTreeTypeName() { return "VS2015"; }
static String getDisplayName() { return "Visual Studio 2015"; }
static String getValueTreeTypeName() { return "VS2015"; }
static String getTargetFolderName() { return "VisualStudio2015"; }
int getVisualStudioVersion() const override { return 14; }
String getSolutionComment() const override { return "# Visual Studio 2015"; }
String getToolsVersion() const override { return "14.0"; }
@@ -1660,16 +1662,18 @@ class MSVCProjectExporterVC2017 : public MSVCProjectExporterBase
{
public:
MSVCProjectExporterVC2017 (Project& p, const ValueTree& t)
: MSVCProjectExporterBase (p, t, getTargetFolderForExporter (getValueTreeTypeName()))
: MSVCProjectExporterBase (p, t, getTargetFolderName())
{
name = getName();
name = getDisplayName();
targetPlatformVersion.setDefault (getDefaultWindowsTargetPlatformVersion());
platformToolsetValue.setDefault (getDefaultToolset());
}
static const char* getName() { return "Visual Studio 2017"; }
static const char* getValueTreeTypeName() { return "VS2017"; }
static String getDisplayName() { return "Visual Studio 2017"; }
static String getValueTreeTypeName() { return "VS2017"; }
static String getTargetFolderName() { return "VisualStudio2017"; }
int getVisualStudioVersion() const override { return 15; }
String getSolutionComment() const override { return "# Visual Studio 2017"; }
String getToolsVersion() const override { return "15.0"; }
@@ -1705,16 +1709,18 @@ class MSVCProjectExporterVC2019 : public MSVCProjectExporterBase
{
public:
MSVCProjectExporterVC2019 (Project& p, const ValueTree& t)
: MSVCProjectExporterBase (p, t, getTargetFolderForExporter (getValueTreeTypeName()))
: MSVCProjectExporterBase (p, t, getTargetFolderName())
{
name = getName();
name = getDisplayName();
targetPlatformVersion.setDefault (getDefaultWindowsTargetPlatformVersion());
platformToolsetValue.setDefault (getDefaultToolset());
}
static const char* getName() { return "Visual Studio 2019"; }
static const char* getValueTreeTypeName() { return "VS2019"; }
static String getDisplayName() { return "Visual Studio 2019"; }
static String getValueTreeTypeName() { return "VS2019"; }
static String getTargetFolderName() { return "VisualStudio2019"; }
int getVisualStudioVersion() const override { return 16; }
String getSolutionComment() const override { return "# Visual Studio 2019"; }
String getToolsVersion() const override { return "16.0"; }


+ 5
- 5
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h View File

@@ -368,8 +368,9 @@ public:
};
//==============================================================================
static const char* getNameLinux() { return "Linux Makefile"; }
static const char* getValueTreeTypeName() { return "LINUX_MAKE"; }
static String getDisplayName() { return "Linux Makefile"; }
static String getValueTreeTypeName() { return "LINUX_MAKE"; }
static String getTargetFolderName() { return "LinuxMakefile"; }
String getExtraPkgConfigString() const { return extraPkgConfigValue.get(); }
@@ -386,9 +387,8 @@ public:
: ProjectExporter (p, t),
extraPkgConfigValue (settings, Ids::linuxExtraPkgConfig, getUndoManager())
{
name = getNameLinux();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderForExporter (getValueTreeTypeName()));
name = getDisplayName();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderName());
}
//==============================================================================


+ 20
- 8
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h View File

@@ -69,9 +69,14 @@ class XcodeProjectExporter : public ProjectExporter
{
public:
//==============================================================================
static const char* getNameMac() { return "Xcode (MacOSX)"; }
static const char* getNameiOS() { return "Xcode (iOS)"; }
static const char* getValueTreeTypeName (bool iOS) { return iOS ? "XCODE_IPHONE" : "XCODE_MAC"; }
static String getDisplayNameMac() { return "Xcode (MacOSX)"; }
static String getDisplayNameiOS() { return "Xcode (iOS)"; }
static String getTargetFolderNameMac() { return "MacOSX"; }
static String getTargetFolderNameiOS() { return "iOS"; }
static String getValueTreeTypeNameMac() { return "XCODE_MAC"; }
static String getValueTreeTypeNameiOS() { return "XCODE_IPHONE"; }
//==============================================================================
XcodeProjectExporter (Project& p, const ValueTree& t, const bool isIOS)
@@ -129,15 +134,22 @@ public:
customLaunchStoryboardValue (settings, Ids::customLaunchStoryboard, getUndoManager()),
exporterBundleIdentifierValue (settings, Ids::bundleIdentifier, getUndoManager())
{
name = iOS ? getNameiOS() : getNameMac();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderForExporter (getValueTreeTypeName (isIOS)));
if (iOS)
{
name = getDisplayNameiOS();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderNameiOS());
}
else
{
name = getDisplayNameMac();
targetLocationValue.setDefault (getDefaultBuildsRootFolder() + getTargetFolderNameMac());
}
}
static XcodeProjectExporter* createForSettings (Project& projectToUse, const ValueTree& settingsToUse)
{
if (settingsToUse.hasType (getValueTreeTypeName (false))) return new XcodeProjectExporter (projectToUse, settingsToUse, false);
if (settingsToUse.hasType (getValueTreeTypeName (true))) return new XcodeProjectExporter (projectToUse, settingsToUse, true);
if (settingsToUse.hasType (getValueTreeTypeNameMac())) return new XcodeProjectExporter (projectToUse, settingsToUse, false);
if (settingsToUse.hasType (getValueTreeTypeNameiOS())) return new XcodeProjectExporter (projectToUse, settingsToUse, true);
return nullptr;
}


+ 126
- 167
extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp View File

@@ -31,202 +31,152 @@
#include "../Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h"
//==============================================================================
static void addType (Array<ProjectExporter::ExporterTypeInfo>& list,
const char* name, const void* iconData, int iconDataSize)
std::vector<ProjectExporter::ExporterTypeInfo> ProjectExporter::getExporterTypeInfos()
{
ProjectExporter::ExporterTypeInfo type = { name, iconData, iconDataSize };
list.add (type);
}
Array<ProjectExporter::ExporterTypeInfo> ProjectExporter::getExporterTypes()
{
Array<ProjectExporter::ExporterTypeInfo> types;
addType (types, XcodeProjectExporter::getNameMac(), BinaryData::export_xcode_svg, BinaryData::export_xcode_svgSize);
addType (types, XcodeProjectExporter::getNameiOS(), BinaryData::export_xcode_svg, BinaryData::export_xcode_svgSize);
addType (types, MSVCProjectExporterVC2019::getName(), BinaryData::export_visualStudio_svg, BinaryData::export_visualStudio_svgSize);
addType (types, MSVCProjectExporterVC2017::getName(), BinaryData::export_visualStudio_svg, BinaryData::export_visualStudio_svgSize);
addType (types, MSVCProjectExporterVC2015::getName(), BinaryData::export_visualStudio_svg, BinaryData::export_visualStudio_svgSize);
addType (types, MakefileProjectExporter::getNameLinux(), BinaryData::export_linux_svg, BinaryData::export_linux_svgSize);
addType (types, AndroidProjectExporter::getName(), BinaryData::export_android_svg, BinaryData::export_android_svgSize);
addType (types, CodeBlocksProjectExporter::getNameWindows(), BinaryData::export_codeBlocks_svg, BinaryData::export_codeBlocks_svgSize);
addType (types, CodeBlocksProjectExporter::getNameLinux(), BinaryData::export_codeBlocks_svg, BinaryData::export_codeBlocks_svgSize);
addType (types, CLionProjectExporter::getName(), BinaryData::export_clion_svg, BinaryData::export_clion_svgSize);
return types;
}
ProjectExporter* ProjectExporter::createNewExporter (Project& project, const int index)
{
ProjectExporter* exp = nullptr;
switch (index)
auto createIcon = [](const void* iconData, size_t iconDataSize)
{
case 0: exp = new XcodeProjectExporter (project, ValueTree (XcodeProjectExporter ::getValueTreeTypeName (false)), false); break;
case 1: exp = new XcodeProjectExporter (project, ValueTree (XcodeProjectExporter ::getValueTreeTypeName (true)), true); break;
case 2: exp = new MSVCProjectExporterVC2019 (project, ValueTree (MSVCProjectExporterVC2019 ::getValueTreeTypeName())); break;
case 3: exp = new MSVCProjectExporterVC2017 (project, ValueTree (MSVCProjectExporterVC2017 ::getValueTreeTypeName())); break;
case 4: exp = new MSVCProjectExporterVC2015 (project, ValueTree (MSVCProjectExporterVC2015 ::getValueTreeTypeName())); break;
case 5: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter ::getValueTreeTypeName())); break;
case 6: exp = new AndroidProjectExporter (project, ValueTree (AndroidProjectExporter ::getValueTreeTypeName())); break;
case 7: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter ::getValueTreeTypeName (CodeBlocksProjectExporter::windowsTarget)), CodeBlocksProjectExporter::windowsTarget); break;
case 8: exp = new CodeBlocksProjectExporter (project, ValueTree (CodeBlocksProjectExporter ::getValueTreeTypeName (CodeBlocksProjectExporter::linuxTarget)), CodeBlocksProjectExporter::linuxTarget); break;
case 9: exp = new CLionProjectExporter (project, ValueTree (CLionProjectExporter ::getValueTreeTypeName())); break;
default: break;
}
exp->createDefaultConfigs();
exp->createDefaultModulePaths();
Image image (Image::ARGB, 200, 200, true);
Graphics g (image);
return exp;
}
std::unique_ptr<Drawable> svgDrawable (Drawable::createFromImageData (iconData, iconDataSize));
StringArray ProjectExporter::getExporterNames()
{
StringArray s;
svgDrawable->drawWithin (g, image.getBounds().toFloat(), RectanglePlacement::fillDestination, 1.0f);
for (auto& e : getExporterTypes())
s.add (e.name);
return image;
};
return s;
}
using namespace BinaryData;
StringArray ProjectExporter::getExporterValueTreeNames()
{
StringArray s;
for (auto& n : getExporterNames())
s.add (getValueTreeNameForExporter (n));
static std::vector<ProjectExporter::ExporterTypeInfo> infos
{
{ XcodeProjectExporter::getValueTreeTypeNameMac(),
XcodeProjectExporter::getDisplayNameMac(),
XcodeProjectExporter::getTargetFolderNameMac(),
createIcon (export_xcode_svg, (size_t) export_xcode_svgSize) },
{ XcodeProjectExporter::getValueTreeTypeNameiOS(),
XcodeProjectExporter::getDisplayNameiOS(),
XcodeProjectExporter::getTargetFolderNameiOS(),
createIcon (export_xcode_svg, (size_t) export_xcode_svgSize) },
{ MSVCProjectExporterVC2019::getValueTreeTypeName(),
MSVCProjectExporterVC2019::getDisplayName(),
MSVCProjectExporterVC2019::getTargetFolderName(),
createIcon (export_visualStudio_svg, export_visualStudio_svgSize) },
{ MSVCProjectExporterVC2017::getValueTreeTypeName(),
MSVCProjectExporterVC2017::getDisplayName(),
MSVCProjectExporterVC2017::getTargetFolderName(),
createIcon (export_visualStudio_svg, export_visualStudio_svgSize) },
{ MSVCProjectExporterVC2015::getValueTreeTypeName(),
MSVCProjectExporterVC2015::getDisplayName(),
MSVCProjectExporterVC2015::getTargetFolderName(),
createIcon (export_visualStudio_svg, export_visualStudio_svgSize) },
{ MakefileProjectExporter::getValueTreeTypeName(),
MakefileProjectExporter::getDisplayName(),
MakefileProjectExporter::getTargetFolderName(),
createIcon (export_linux_svg, export_linux_svgSize) },
{ AndroidProjectExporter::getValueTreeTypeName(),
AndroidProjectExporter::getDisplayName(),
AndroidProjectExporter::getTargetFolderName(),
createIcon (export_android_svg, export_android_svgSize) },
{ CodeBlocksProjectExporter::getValueTreeTypeNameWindows(),
CodeBlocksProjectExporter::getDisplayNameWindows(),
CodeBlocksProjectExporter::getTargetFolderNameWindows(),
createIcon (export_codeBlocks_svg, export_codeBlocks_svgSize) },
{ CodeBlocksProjectExporter::getValueTreeTypeNameLinux(),
CodeBlocksProjectExporter::getDisplayNameLinux(),
CodeBlocksProjectExporter::getTargetFolderNameLinux(),
createIcon (export_codeBlocks_svg, export_codeBlocks_svgSize) },
{ CLionProjectExporter::getValueTreeTypeName(),
CLionProjectExporter::getDisplayName(),
CLionProjectExporter::getTargetFolderName(),
createIcon (export_clion_svg, export_clion_svgSize) }
};
return s;
return infos;
}
String ProjectExporter::getValueTreeNameForExporter (const String& exporterName)
ProjectExporter::ExporterTypeInfo ProjectExporter::getTypeInfoForExporter (const Identifier& exporterIdentifier)
{
if (exporterName == XcodeProjectExporter::getNameMac())
return XcodeProjectExporter::getValueTreeTypeName (false);
if (exporterName == XcodeProjectExporter::getNameiOS())
return XcodeProjectExporter::getValueTreeTypeName (true);
auto typeInfos = getExporterTypeInfos();
if (exporterName == MSVCProjectExporterVC2019::getName())
return MSVCProjectExporterVC2019::getValueTreeTypeName();
if (exporterName == MSVCProjectExporterVC2017::getName())
return MSVCProjectExporterVC2017::getValueTreeTypeName();
if (exporterName == MSVCProjectExporterVC2015::getName())
return MSVCProjectExporterVC2015::getValueTreeTypeName();
if (exporterName == MakefileProjectExporter::getNameLinux())
return MakefileProjectExporter::getValueTreeTypeName();
if (exporterName == AndroidProjectExporter::getName())
return AndroidProjectExporter::getValueTreeTypeName();
if (exporterName == CodeBlocksProjectExporter::getNameLinux())
return CodeBlocksProjectExporter::getValueTreeTypeName (CodeBlocksProjectExporter::CodeBlocksOS::linuxTarget);
auto predicate = [exporterIdentifier] (const ProjectExporter::ExporterTypeInfo& info)
{
return info.identifier == exporterIdentifier;
};
if (exporterName == CodeBlocksProjectExporter::getNameWindows())
return CodeBlocksProjectExporter::getValueTreeTypeName (CodeBlocksProjectExporter::CodeBlocksOS::windowsTarget);
auto iter = std::find_if (typeInfos.begin(), typeInfos.end(),
std::move (predicate));
if (exporterName == CLionProjectExporter::getName())
return CLionProjectExporter::getValueTreeTypeName();
if (iter != typeInfos.end())
return *iter;
return {};
}
String ProjectExporter::getTargetFolderForExporter (const String& exporterValueTreeName)
ProjectExporter::ExporterTypeInfo ProjectExporter::getCurrentPlatformExporterTypeInfo()
{
if (exporterValueTreeName == "XCODE_MAC") return "MacOSX";
if (exporterValueTreeName == "XCODE_IPHONE") return "iOS";
if (exporterValueTreeName == "VS2019") return "VisualStudio2019";
if (exporterValueTreeName == "VS2017") return "VisualStudio2017";
if (exporterValueTreeName == "VS2015") return "VisualStudio2015";
if (exporterValueTreeName == "LINUX_MAKE") return "LinuxMakefile";
if (exporterValueTreeName == "ANDROIDSTUDIO") return "Android";
if (exporterValueTreeName == "CODEBLOCKS_WINDOWS") return "CodeBlocksWindows";
if (exporterValueTreeName == "CODEBLOCKS_LINUX") return "CodeBlocksLinux";
if (exporterValueTreeName == "CLION") return "CLion";
return {};
#if JUCE_MAC
return ProjectExporter::getTypeInfoForExporter (XcodeProjectExporter::getValueTreeTypeNameMac());
#elif JUCE_WINDOWS
return ProjectExporter::getTypeInfoForExporter (MSVCProjectExporterVC2019::getValueTreeTypeName());
#elif JUCE_LINUX
return ProjectExporter::getTypeInfoForExporter (MakefileProjectExporter::getValueTreeTypeName());
#else
#error "unknown platform!"
#endif
}
StringArray ProjectExporter::getAllDefaultBuildsFolders()
std::unique_ptr<ProjectExporter> ProjectExporter::createNewExporter (Project& project, const Identifier& exporterIdentifier)
{
StringArray folders;
auto exporter = createExporterFromSettings (project, ValueTree (exporterIdentifier));
jassert (exporter != nullptr);
folders.add (getDefaultBuildsRootFolder() + "iOS");
folders.add (getDefaultBuildsRootFolder() + "MacOSX");
folders.add (getDefaultBuildsRootFolder() + "VisualStudio2019");
folders.add (getDefaultBuildsRootFolder() + "VisualStudio2017");
folders.add (getDefaultBuildsRootFolder() + "VisualStudio2015");
folders.add (getDefaultBuildsRootFolder() + "LinuxMakefile");
folders.add (getDefaultBuildsRootFolder() + "CodeBlocksWindows");
folders.add (getDefaultBuildsRootFolder() + "CodeBlocksLinux");
folders.add (getDefaultBuildsRootFolder() + "Android");
folders.add (getDefaultBuildsRootFolder() + "CLion");
exporter->createDefaultConfigs();
exporter->createDefaultModulePaths();
return folders;
return exporter;
}
String ProjectExporter::getCurrentPlatformExporterName()
std::unique_ptr<ProjectExporter> ProjectExporter::createExporterFromSettings (Project& project, const ValueTree& settings)
{
#if JUCE_MAC
return XcodeProjectExporter::getNameMac();
#elif JUCE_WINDOWS
return MSVCProjectExporterVC2019::getName();
#elif JUCE_LINUX
return MakefileProjectExporter::getNameLinux();
#else
#error // huh?
#endif
}
std::unique_ptr<ProjectExporter> exporter;
ProjectExporter* ProjectExporter::createNewExporter (Project& project, const String& name)
{
return createNewExporter (project, getExporterNames().indexOf (name));
}
ProjectExporter* ProjectExporter::createExporter (Project& project, const ValueTree& settings)
{
ProjectExporter* exp = MSVCProjectExporterVC2019 ::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2017 ::createForSettings (project, settings);
if (exp == nullptr) exp = MSVCProjectExporterVC2015 ::createForSettings (project, settings);
if (exp == nullptr) exp = XcodeProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = MakefileProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = AndroidProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = CodeBlocksProjectExporter ::createForSettings (project, settings);
if (exp == nullptr) exp = CLionProjectExporter ::createForSettings (project, settings);
exporter.reset (XcodeProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MSVCProjectExporterVC2019::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MSVCProjectExporterVC2017::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MSVCProjectExporterVC2015::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (MakefileProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (AndroidProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (CodeBlocksProjectExporter::createForSettings (project, settings));
if (exporter == nullptr) exporter.reset (CLionProjectExporter::createForSettings (project, settings));
jassert (exp != nullptr);
return exp;
jassert (exporter != nullptr);
return exporter;
}
bool ProjectExporter::canProjectBeLaunched (Project* project)
{
if (project != nullptr)
{
const char* types[] =
static Identifier types[]
{
#if JUCE_MAC
XcodeProjectExporter::getValueTreeTypeName (false),
XcodeProjectExporter::getValueTreeTypeName (true),
#elif JUCE_WINDOWS
MSVCProjectExporterVC2019::getValueTreeTypeName(),
MSVCProjectExporterVC2017::getValueTreeTypeName(),
MSVCProjectExporterVC2015::getValueTreeTypeName(),
#elif JUCE_LINUX
// (this doesn't currently launch.. not really sure what it would do on linux)
//MakefileProjectExporter::getValueTreeTypeName(),
#endif
AndroidProjectExporter::getValueTreeTypeName(),
nullptr
#if JUCE_MAC
XcodeProjectExporter::getValueTreeTypeNameMac(),
XcodeProjectExporter::getValueTreeTypeNameiOS(),
#elif JUCE_WINDOWS
MSVCProjectExporterVC2019::getValueTreeTypeName(),
MSVCProjectExporterVC2017::getValueTreeTypeName(),
MSVCProjectExporterVC2015::getValueTreeTypeName(),
#endif
AndroidProjectExporter::getValueTreeTypeName()
};
for (const char** type = types; *type != nullptr; ++type)
if (project->getExporters().getChildWithName (*type).isValid())
for (auto& exporterIdentifier : types)
if (project->getExporters().getChildWithName (exporterIdentifier).isValid())
return true;
}
@@ -255,14 +205,23 @@ ProjectExporter::ProjectExporter (Project& p, const ValueTree& state)
updateCompilerFlagValues();
}
ProjectExporter::~ProjectExporter()
String ProjectExporter::getUniqueName() const
{
}
auto targetLocationString = getTargetLocationString();
auto defaultBuildsRootFolder = getDefaultBuildsRootFolder();
String ProjectExporter::getName() const
{
if (! getAllDefaultBuildsFolders().contains (getTargetLocationString()))
return name + " - " + getTargetLocationString();
auto typeInfos = getExporterTypeInfos();
auto predicate = [targetLocationString, defaultBuildsRootFolder] (const ProjectExporter::ExporterTypeInfo& info)
{
return defaultBuildsRootFolder + info.targetFolder == targetLocationString;
};
auto iter = std::find_if (typeInfos.begin(), typeInfos.end(),
std::move (predicate));
if (iter == typeInfos.end())
return name + " - " + targetLocationString;
return name;
}
@@ -302,7 +261,7 @@ void ProjectExporter::createPropertyEditors (PropertyListBuilder& props)
if ((shouldBuildTargetType (build_tools::ProjectType::Target::VSTPlugIn) && project.shouldBuildVST()) || (project.isVSTPluginHost() && supportsTargetType (build_tools::ProjectType::Target::VSTPlugIn)))
{
props.add (new FilePathPropertyComponent (vstLegacyPathValueWrapper.wrappedValue, "VST (Legacy) SDK Folder", true,
props.add (new FilePathPropertyComponent (vstLegacyPathValueWrapper.getWrappedValueWithDefault(), "VST (Legacy) SDK Folder", true,
getTargetOSForExporter() == TargetOS::getThisOS(), "*", project.getProjectFolder()),
"If you're building a VST plug-in or host, you can use this field to override the global VST (Legacy) SDK path with a project-specific path. "
"This can be an absolute path, or a path relative to the Projucer project file.");
@@ -310,14 +269,14 @@ void ProjectExporter::createPropertyEditors (PropertyListBuilder& props)
if (shouldBuildTargetType (build_tools::ProjectType::Target::AAXPlugIn) && project.shouldBuildAAX())
{
props.add (new FilePathPropertyComponent (aaxPathValueWrapper.wrappedValue, "AAX SDK Folder", true,
props.add (new FilePathPropertyComponent (aaxPathValueWrapper.getWrappedValueWithDefault(), "AAX SDK Folder", true,
getTargetOSForExporter() == TargetOS::getThisOS(), "*", project.getProjectFolder()),
"If you're building an AAX plug-in, 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 (shouldBuildTargetType (build_tools::ProjectType::Target::RTASPlugIn) && project.shouldBuildRTAS())
{
props.add (new FilePathPropertyComponent (rtasPathValueWrapper.wrappedValue, "RTAS SDK Folder", true,
props.add (new FilePathPropertyComponent (rtasPathValueWrapper.getWrappedValueWithDefault(), "RTAS SDK Folder", true,
getTargetOSForExporter() == TargetOS::getThisOS(), "*", project.getProjectFolder()),
"If you're building an RTAS plug-in, this must be the folder containing the RTAS SDK. This can be an absolute path, or a path relative to the Projucer project file.");
}


+ 18
- 60
extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h View File

@@ -20,6 +20,8 @@
#include "../Project/jucer_Project.h"
#include "../Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h"
#include "../Utility/Helpers/jucer_ValueWithDefaultWrapper.h"
#include "../Project/Modules/jucer_Modules.h"
class ProjectSaver;
@@ -28,40 +30,26 @@ class ProjectExporter : private Value::Listener
{
public:
ProjectExporter (Project&, const ValueTree& settings);
virtual ~ProjectExporter() override;
virtual ~ProjectExporter() override = default;
//==============================================================================
struct ExporterTypeInfo
{
String name;
const void* iconData;
int iconDataSize;
Image getIcon() const
{
Image image (Image::ARGB, 200, 200, true);
Graphics g (image);
std::unique_ptr<Drawable> svgDrawable (Drawable::createFromImageData (iconData, (size_t) iconDataSize));
svgDrawable->drawWithin (g, image.getBounds().toFloat(), RectanglePlacement::fillDestination, 1.0f);
Identifier identifier;
String displayName;
String targetFolder;
return image;
}
Image icon;
};
static StringArray getExporterNames();
static StringArray getExporterValueTreeNames();
static Array<ExporterTypeInfo> getExporterTypes();
static String getValueTreeNameForExporter (const String& exporterName);
static String getTargetFolderForExporter (const String& exporterValueTreeName);
static StringArray getAllDefaultBuildsFolders();
static std::vector<ExporterTypeInfo> getExporterTypeInfos();
static ExporterTypeInfo getTypeInfoForExporter (const Identifier& exporterIdentifier);
static ExporterTypeInfo getCurrentPlatformExporterTypeInfo();
static ProjectExporter* createNewExporter (Project&, const int index);
static ProjectExporter* createNewExporter (Project&, const String& name);
static ProjectExporter* createExporter (Project&, const ValueTree& settings);
static bool canProjectBeLaunched (Project*);
static std::unique_ptr<ProjectExporter> createNewExporter (Project&, const Identifier& exporterIdentifier);
static std::unique_ptr<ProjectExporter> createExporterFromSettings (Project&, const ValueTree& settings);
static String getCurrentPlatformExporterName();
static bool canProjectBeLaunched (Project*);
//==============================================================================
// capabilities of exporter
@@ -125,7 +113,7 @@ public:
}
//==============================================================================
String getName() const;
String getUniqueName() const;
File getTargetFolder() const;
Project& getProject() noexcept { return project; }
@@ -146,9 +134,9 @@ public:
bool shouldUseGNUExtensions() const { return gnuExtensionsValue.get(); }
String getVSTLegacyPathString() const { return vstLegacyPathValueWrapper.wrappedValue.get(); }
String getAAXPathString() const { return aaxPathValueWrapper.wrappedValue.get(); }
String getRTASPathString() const { return rtasPathValueWrapper.wrappedValue.get(); }
String getVSTLegacyPathString() const { return vstLegacyPathValueWrapper.getCurrentValue(); }
String getAAXPathString() const { return aaxPathValueWrapper.getCurrentValue(); }
String getRTASPathString() const { return rtasPathValueWrapper.getCurrentValue(); }
// NB: this is the path to the parent "modules" folder that contains the named module, not the
// module folder itself.
@@ -355,36 +343,6 @@ protected:
const File projectFolder;
//==============================================================================
// Wraps a ValueWithDefault object that has a default which depends on a global value.
// Used for the VST, RTAS and AAX project-specific path options.
struct ValueWithDefaultWrapper : public Value::Listener
{
void init (const ValueWithDefault& vwd, ValueWithDefault global, TargetOS::OS targetOS)
{
wrappedValue = vwd;
globalValue = global.getPropertyAsValue();
globalIdentifier = global.getPropertyID();
os = targetOS;
if (wrappedValue.get() == var())
wrappedValue.resetToDefault();
globalValue.addListener (this);
valueChanged (globalValue);
}
void valueChanged (Value&) override
{
wrappedValue.setDefault (getAppSettings().getStoredPath (globalIdentifier, os).get());
}
ValueWithDefault wrappedValue;
Value globalValue;
Identifier globalIdentifier;
TargetOS::OS os;
};
ValueWithDefaultWrapper vstLegacyPathValueWrapper, rtasPathValueWrapper, aaxPathValueWrapper;
ValueWithDefault targetLocationValue, extraCompilerFlagsValue, extraLinkerFlagsValue, externalLibrariesValue,


+ 3
- 3
extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp View File

@@ -697,7 +697,7 @@ void ProjectSaver::writeProjects (const OwnedArray<LibraryModule>& modules, Proj
{
for (Project::ExporterIterator exp (project); exp.next();)
{
if (specifiedExporterToSave != nullptr && exp->getName() != specifiedExporterToSave->getName())
if (specifiedExporterToSave != nullptr && exp->getUniqueName() != specifiedExporterToSave->getUniqueName())
continue;
exporters.push_back (std::move (exp.exporter));
@@ -754,7 +754,7 @@ void ProjectSaver::writeProjects (const OwnedArray<LibraryModule>& modules, Proj
for (auto& exporter : exporters)
clionExporter->writeCMakeListsExporterSection (exporter.get());
std::cout << "Finished saving: " << clionExporter->getName() << std::endl;
std::cout << "Finished saving: " << clionExporter->getUniqueName() << std::endl;
}
}
@@ -806,7 +806,7 @@ void ProjectSaver::saveExporter (ProjectExporter& exporter, const OwnedArray<Lib
if (! exporter.isCLion())
{
auto exporterName = exporter.getName();
auto exporterName = exporter.getUniqueName();
MessageManager::callAsync ([exporterName] { std::cout << "Finished saving: " << exporterName << std::endl; });
}
}


+ 1
- 1
extras/Projucer/Source/Settings/jucer_StoredSettings.h View File

@@ -22,7 +22,7 @@
#include "jucer_AppearanceSettings.h"
//==============================================================================
class StoredSettings : public ValueTree::Listener
class StoredSettings : private ValueTree::Listener
{
public:
StoredSettings();


+ 67
- 2
extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp View File

@@ -350,7 +350,72 @@ bool isJUCEModulesFolder (const File& f)
}
//==============================================================================
static var parseJUCEHeaderMetadata (const StringArray& lines)
bool isDivider (const String& line)
{
auto afterIndent = line.trim();
if (afterIndent.startsWith ("//") && afterIndent.length() > 20)
{
afterIndent = afterIndent.substring (5);
if (afterIndent.containsOnly ("=")
|| afterIndent.containsOnly ("/")
|| afterIndent.containsOnly ("-"))
{
return true;
}
}
return false;
}
int getIndexOfCommentBlockStart (const StringArray& lines, int endIndex)
{
auto endLine = lines[endIndex];
if (endLine.contains ("*/"))
{
for (int i = endIndex; i >= 0; --i)
if (lines[i].contains ("/*"))
return i;
}
if (endLine.trim().startsWith ("//") && ! isDivider (endLine))
{
for (int i = endIndex; i >= 0; --i)
if (! lines[i].startsWith ("//") || isDivider (lines[i]))
return i + 1;
}
return -1;
}
int findBestLineToScrollToForClass (StringArray lines, StringRef className, bool isPlugin)
{
for (auto line : lines)
{
if (line.contains ("struct " + className) || line.contains ("class " + className)
|| (isPlugin && line.contains ("public AudioProcessor") && ! line.contains ("AudioProcessorEditor")))
{
auto index = lines.indexOf (line);
auto commentBlockStartIndex = getIndexOfCommentBlockStart (lines, index - 1);
if (commentBlockStartIndex != -1)
index = commentBlockStartIndex;
if (isDivider (lines[index - 1]))
index -= 1;
return index;
}
}
return 0;
}
//==============================================================================
var parseJUCEHeaderMetadata (const StringArray& lines)
{
auto* o = new DynamicObject();
var result (o);
@@ -373,7 +438,7 @@ static var parseJUCEHeaderMetadata (const StringArray& lines)
return result;
}
static String parseMetadataItem (const StringArray& lines, int& index)
String parseMetadataItem (const StringArray& lines, int& index)
{
String result = lines[index++];


+ 5
- 3
extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h View File

@@ -55,6 +55,7 @@ StringArray getModulesRequiredForComponent() noexcept;
StringArray getModulesRequiredForAudioProcessor() noexcept;
bool isPIPFile (const File&) noexcept;
int findBestLineToScrollToForClass (StringArray, StringRef, bool isPlugin = false);
bool isValidJUCEExamplesDirectory (const File&) noexcept;
@@ -105,7 +106,7 @@ struct PropertyListBuilder
// A ValueSource which takes an input source, and forwards any changes in it.
// This class is a handy way to create sources which re-map a value.
class ValueSourceFilter : public Value::ValueSource,
public Value::Listener
private Value::Listener
{
public:
ValueSourceFilter (const Value& source) : sourceValue (source)
@@ -113,10 +114,11 @@ public:
sourceValue.addListener (this);
}
void valueChanged (Value&) override { sendChangeMessage (true); }
protected:
Value sourceValue;
private:
void valueChanged (Value&) override { sendChangeMessage (true); }
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ValueSourceFilter)
};

extras/Projucer/Source/Wizards/jucer_NewFileWizard.cpp → extras/Projucer/Source/Utility/Helpers/jucer_NewFileWizard.cpp View File

@@ -16,7 +16,7 @@
==============================================================================
*/
#include "../Application/jucer_Headers.h"
#include "../../Application/jucer_Headers.h"
#include "jucer_NewFileWizard.h"
//==============================================================================
@@ -24,12 +24,21 @@ namespace
{
static String fillInBasicTemplateFields (const File& file, const Project::Item& item, const char* templateName)
{
return replaceLineFeeds (item.project.getFileTemplate (templateName)
.replace ("%%filename%%", file.getFileName(), false)
.replace ("%%date%%", Time::getCurrentTime().toString (true, true, true), false)
.replace ("%%author%%", SystemStats::getFullUserName(), false)
.replace ("%%include_corresponding_header%%", CodeHelpers::createIncludeStatement (file.withFileExtension (".h"), file)),
item.project.getProjectLineFeed());
int dataSize;
if (auto* data = BinaryData::getNamedResource (templateName, dataSize))
{
auto fileTemplate = String::fromUTF8 (data, dataSize);
return replaceLineFeeds (fileTemplate.replace ("%%filename%%", file.getFileName(), false)
.replace ("%%date%%", Time::getCurrentTime().toString (true, true, true), false)
.replace ("%%author%%", SystemStats::getFullUserName(), false)
.replace ("%%include_corresponding_header%%", CodeHelpers::createIncludeStatement (file.withFileExtension (".h"), file)),
item.project.getProjectLineFeed());
}
jassertfalse;
return {};
}
static bool fillInNewCppFileTemplate (const File& file, const Project::Item& item, const char* templateName)

extras/Projucer/Source/Wizards/jucer_NewFileWizard.h → extras/Projucer/Source/Utility/Helpers/jucer_NewFileWizard.h View File

@@ -18,7 +18,7 @@
#pragma once
#include "../Project/jucer_Project.h"
#include "../../Project/jucer_Project.h"
//==============================================================================
class NewFileWizard

+ 66
- 0
extras/Projucer/Source/Utility/Helpers/jucer_ValueWithDefaultWrapper.h View File

@@ -0,0 +1,66 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
/**
Wraps a ValueWithDefault object that has a default which depends on a global value.
*/
class ValueWithDefaultWrapper : private Value::Listener
{
public:
ValueWithDefaultWrapper() = default;
void init (const ValueWithDefault& vwd, ValueWithDefault global, TargetOS::OS targetOS)
{
wrappedValue = vwd;
globalValue = global.getPropertyAsValue();
globalIdentifier = global.getPropertyID();
os = targetOS;
if (wrappedValue.get() == var())
wrappedValue.resetToDefault();
globalValue.addListener (this);
valueChanged (globalValue);
}
ValueWithDefault& getWrappedValueWithDefault()
{
return wrappedValue;
}
var getCurrentValue() const
{
return wrappedValue.get();
}
private:
void valueChanged (Value&) override
{
wrappedValue.setDefault (getAppSettings().getStoredPath (globalIdentifier, os).get());
}
ValueWithDefault wrappedValue;
Value globalValue;
Identifier globalIdentifier;
TargetOS::OS os;
};

+ 19
- 16
extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp View File

@@ -18,6 +18,8 @@
#include "../../Application/jucer_Headers.h"
#include "../../ProjectSaving/jucer_ProjectExporter.h"
#include "../../ProjectSaving/jucer_ProjectExport_Xcode.h"
#include "../../ProjectSaving/jucer_ProjectExport_Android.h"
#include "jucer_PIPGenerator.h"
//==============================================================================
@@ -67,15 +69,16 @@ static bool isJUCEExample (const File& pipFile)
return false;
}
static bool isValidExporterName (StringRef exporterName)
static bool isValidExporterIdentifier (const Identifier& exporterIdentifier)
{
return ProjectExporter::getExporterValueTreeNames().contains (exporterName, true);
return ProjectExporter::getTypeInfoForExporter (exporterIdentifier).identifier.toString().isNotEmpty();
}
static bool exporterRequiresExampleAssets (const String& exporterName, const String& projectName)
static bool exporterRequiresExampleAssets (const Identifier& exporterIdentifier, const String& projectName)
{
return (exporterName == "XCODE_IPHONE" || exporterName == "ANDROIDSTUDIO")
|| (exporterName == "XCODE_MAC" && projectName == "AUv3SynthPlugin");
return (exporterIdentifier.toString() == XcodeProjectExporter::getValueTreeTypeNameiOS()
|| exporterIdentifier.toString() == AndroidProjectExporter::getValueTreeTypeName())
|| (exporterIdentifier.toString() == XcodeProjectExporter::getValueTreeTypeNameMac() && projectName == "AUv3SynthPlugin");
}
//==============================================================================
@@ -99,7 +102,7 @@ PIPGenerator::PIPGenerator (const File& pip, const File& output, const File& juc
auto isClipboard = (pip.getParentDirectory().getFileName() == "Clipboard"
&& pip.getParentDirectory().getParentDirectory().getFileName() == "PIPs");
outputDirectory = outputDirectory.getChildFile (metadata[Ids::name].toString());
outputDirectory = outputDirectory.getChildFile (metadata[Ids::name].toString()).getNonexistentSibling();
useLocalCopy = metadata[Ids::useLocalCopy].toString().trim().getIntValue() == 1 || isClipboard;
if (userModulesPath != File())
@@ -225,13 +228,13 @@ ValueTree PIPGenerator::createBuildConfigChild (bool isDebug)
return child;
}
ValueTree PIPGenerator::createExporterChild (const String& exporterName)
ValueTree PIPGenerator::createExporterChild (const Identifier& exporterIdentifier)
{
ValueTree exporter (exporterName);
ValueTree exporter (exporterIdentifier);
exporter.setProperty (Ids::targetFolder, "Builds/" + ProjectExporter::getTargetFolderForExporter (exporterName), nullptr);
exporter.setProperty (Ids::targetFolder, "Builds/" + ProjectExporter::getTypeInfoForExporter (exporterIdentifier).targetFolder, nullptr);
if (isJUCEExample (pipFile) && exporterRequiresExampleAssets (exporterName, metadata[Ids::name]))
if (isJUCEExample (pipFile) && exporterRequiresExampleAssets (exporterIdentifier, metadata[Ids::name]))
{
auto examplesDir = getExamplesDirectory();
@@ -239,8 +242,8 @@ ValueTree PIPGenerator::createExporterChild (const String& exporterName)
{
auto assetsDirectoryPath = examplesDir.getChildFile ("Assets").getFullPathName();
exporter.setProperty (exporterName == "ANDROIDSTUDIO" ? Ids::androidExtraAssetsFolder
: Ids::customXcodeResourceFolders,
exporter.setProperty (exporterIdentifier.toString() == AndroidProjectExporter::getValueTreeTypeName() ? Ids::androidExtraAssetsFolder
: Ids::customXcodeResourceFolders,
assetsDirectoryPath, nullptr);
}
else
@@ -295,7 +298,7 @@ void PIPGenerator::addExporters (ValueTree& jucerTree)
{
e = e.trim().toUpperCase();
if (isValidExporterName (e))
if (isValidExporterIdentifier (e))
exportersTree.addChild (createExporterChild (e), -1, nullptr);
}
@@ -366,15 +369,15 @@ Result PIPGenerator::setProjectSettings (ValueTree& jucerTree)
if (type == "Console")
{
jucerTree.setProperty (Ids::projectType, "consoleapp", nullptr);
jucerTree.setProperty (Ids::projectType, build_tools::ProjectType_ConsoleApp::getTypeName(), nullptr);
}
else if (type == "Component")
{
jucerTree.setProperty (Ids::projectType, "guiapp", nullptr);
jucerTree.setProperty (Ids::projectType, build_tools::ProjectType_GUIApp::getTypeName(), nullptr);
}
else if (type == "AudioProcessor")
{
jucerTree.setProperty (Ids::projectType, "audioplug", nullptr);
jucerTree.setProperty (Ids::projectType, build_tools::ProjectType_AudioPlugin::getTypeName(), nullptr);
jucerTree.setProperty (Ids::pluginAUIsSandboxSafe, "1", nullptr);
setPropertyIfNotEmpty (Ids::pluginManufacturer, metadata[Ids::vendor]);


+ 3
- 3
extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.h View File

@@ -30,8 +30,8 @@ public:
//==============================================================================
bool hasValidPIP() const noexcept { return ! metadata[Ids::name].toString().isEmpty(); }
File getJucerFile() noexcept { return outputDirectory.getChildFile (metadata[Ids::name].toString() + ".jucer"); }
File getPIPFile() noexcept { return useLocalCopy ? outputDirectory.getChildFile ("Source").getChildFile (pipFile.getFileName()) : pipFile; }
File getJucerFile() const noexcept { return outputDirectory.getChildFile (metadata[Ids::name].toString() + ".jucer"); }
File getPIPFile() const noexcept { return useLocalCopy ? outputDirectory.getChildFile ("Source").getChildFile (pipFile.getFileName()) : pipFile; }
String getMainClassName() const noexcept { return metadata[Ids::mainClass]; }
@@ -48,7 +48,7 @@ private:
ValueTree createModulePathChild (const String& moduleID);
ValueTree createBuildConfigChild (bool isDebug);
ValueTree createExporterChild (const String& exporterName);
ValueTree createExporterChild (const Identifier& exporterIdentifier);
ValueTree createModuleChild (const String& moduleID);
void addExporters (ValueTree& jucerTree);


+ 5
- 4
extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_ColourPropertyComponent.h View File

@@ -43,7 +43,7 @@ private:
a colour selector when you click it.
*/
struct ColourEditorComponent : public Component,
public Value::Listener
private Value::Listener
{
ColourEditorComponent (UndoManager* um, const Value& colour,
Colour defaultCol, const bool canReset)
@@ -115,6 +115,7 @@ private:
getScreenBounds(), nullptr);
}
private:
void valueChanged (Value&) override
{
refresh();
@@ -131,8 +132,8 @@ private:
//==============================================================================
struct PopupColourSelector : public Component,
public ChangeListener,
public Value::Listener
private ChangeListener,
private Value::Listener
{
PopupColourSelector (const Value& colour,
Colour defaultCol,
@@ -193,6 +194,7 @@ private:
}
}
private:
void changeListenerCallback (ChangeBroadcaster*) override
{
if (selector.getCurrentColour() != getColour())
@@ -204,7 +206,6 @@ private:
selector.setCurrentColour (getColour());
}
private:
StoredSettings::ColourSelectorWithSwatches selector;
TextButton defaultButton;
Value colourValue;


+ 0
- 197
extras/Projucer/Source/Wizards/jucer_NewProjectWizard.h View File

@@ -1,197 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
#include "../Utility/Helpers/jucer_PresetIDs.h"
//==============================================================================
static void setExecutableNameForAllTargets (Project& project, const String& exeName)
{
for (Project::ExporterIterator exporter (project); exporter.next();)
for (ProjectExporter::ConfigIterator config (*exporter); config.next();)
config->getValue (Ids::targetName) = exeName;
}
static Project::Item createSourceGroup (Project& project)
{
return project.getMainGroup().addNewSubGroup ("Source", 0);
}
static File& getLastWizardFolder()
{
if (getAppSettings().lastWizardFolder.isDirectory())
return getAppSettings().lastWizardFolder;
#if JUCE_WINDOWS
static File lastFolderFallback (File::getSpecialLocation (File::userDocumentsDirectory));
#else
static File lastFolderFallback (File::getSpecialLocation (File::userHomeDirectory));
#endif
return lastFolderFallback;
}
//==============================================================================
struct NewProjectWizard
{
NewProjectWizard() {}
virtual ~NewProjectWizard() {}
//==============================================================================
virtual String getName() const = 0;
virtual String getDescription() const = 0;
virtual const char* getIcon() const = 0;
virtual StringArray getFileCreationOptions() { return {}; }
virtual Result processResultsFromSetupItems (WizardComp&) { return Result::ok(); }
virtual bool initialiseProject (Project& project) = 0;
virtual StringArray getDefaultModules()
{
return
{
"juce_audio_basics",
"juce_audio_devices",
"juce_audio_formats",
"juce_audio_processors",
"juce_core",
"juce_cryptography",
"juce_data_structures",
"juce_events",
"juce_graphics",
"juce_gui_basics",
"juce_gui_extra",
"juce_opengl",
};
}
String appTitle;
File targetFolder, projectFile, modulesFolder;
WizardComp* ownerWizardComp;
StringArray failedFiles;
bool selectJuceFolder()
{
return ModulesFolderPathBox::selectJuceFolder (modulesFolder);
}
//==============================================================================
Project* runWizard (WizardComp& wc,
const String& projectName,
const File& target,
bool useGlobalPath)
{
ownerWizardComp = &wc;
appTitle = projectName;
targetFolder = target;
if (! targetFolder.exists())
{
if (! targetFolder.createDirectory())
failedFiles.add (targetFolder.getFullPathName());
}
else if (FileHelpers::containsAnyNonHiddenFiles (targetFolder))
{
if (! AlertWindow::showOkCancelBox (AlertWindow::InfoIcon,
TRANS("New JUCE Project"),
TRANS("You chose the folder:\n\nXFLDRX\n\n").replace ("XFLDRX", targetFolder.getFullPathName())
+ TRANS("This folder isn't empty - are you sure you want to create the project there?")
+ "\n\n"
+ TRANS("Any existing files with the same names may be overwritten by the new files.")))
return nullptr;
}
projectFile = targetFolder.getChildFile (File::createLegalFileName (appTitle))
.withFileExtension (Project::projectFileExtension);
auto project = std::make_unique<Project> (projectFile);
if (failedFiles.size() == 0)
{
project->setTitle (appTitle);
if (! initialiseProject (*project))
return nullptr;
project->getConfigFlag ("JUCE_STRICT_REFCOUNTEDPOINTER") = true;
project->getProjectValue (Ids::useAppConfig) = false;
project->getProjectValue (Ids::addUsingNamespaceToJuceHeader) = false;
if (! ProjucerApplication::getApp().getLicenseController().getCurrentState().isPaidOrGPL())
project->getProjectValue (Ids::displaySplashScreen) = true;
addExporters (*project, wc);
addDefaultModules (*project, useGlobalPath);
if (project->save (false, true) != FileBasedDocument::savedOk)
return nullptr;
project->setChangedFlag (false);
}
if (failedFiles.size() > 0)
{
AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
TRANS("Errors in Creating Project!"),
TRANS("The following files couldn't be written:")
+ "\n\n"
+ failedFiles.joinIntoString ("\n", 0, 10));
return nullptr;
}
return project.release();
}
//==============================================================================
File getSourceFilesFolder() const
{
return projectFile.getSiblingFile ("Source");
}
void createSourceFolder()
{
if (! getSourceFilesFolder().createDirectory())
failedFiles.add (getSourceFilesFolder().getFullPathName());
}
void addDefaultModules (Project& project, bool useGlobalPath)
{
auto defaultModules = getDefaultModules();
AvailableModulesList list;
list.scanPaths ({ modulesFolder });
for (auto& mod : list.getAllModules())
if (defaultModules.contains (mod.first))
project.getEnabledModules().addModule (mod.second, false, useGlobalPath);
}
void addExporters (Project& project, WizardComp& wizardComp)
{
StringArray types (wizardComp.platformTargets.getSelectedPlatforms());
for (int i = 0; i < types.size(); ++i)
project.addNewExporter (types[i]);
if (project.getNumExporters() == 0)
project.createExporterForCurrentPlatform();
}
};

+ 0
- 82
extras/Projucer/Source/Wizards/jucer_NewProjectWizardClasses.cpp View File

@@ -1,82 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#include "../Application/jucer_Headers.h"
#include "jucer_NewProjectWizardClasses.h"
#include "../ProjectSaving/jucer_ProjectExporter.h"
#include "../Utility/UI/jucer_SlidingPanelComponent.h"
struct NewProjectWizardClasses
{
class WizardComp;
#include "jucer_NewProjectWizard.h"
#include "jucer_ProjectWizard_GUIApp.h"
#include "jucer_ProjectWizard_Console.h"
#include "jucer_ProjectWizard_AudioPlugin.h"
#include "jucer_ProjectWizard_StaticLibrary.h"
#include "jucer_ProjectWizard_DLL.h"
#include "jucer_ProjectWizard_openGL.h"
#include "jucer_ProjectWizard_Animated.h"
#include "jucer_ProjectWizard_AudioApp.h"
#include "jucer_ProjectWizard_Blank.h"
#include "jucer_NewProjectWizardComponent.h"
#include "jucer_TemplateThumbnailsComponent.h"
#include "jucer_StartPageComponent.h"
//==============================================================================
static int getNumWizards() noexcept
{
return 9;
}
static std::unique_ptr<NewProjectWizard> createWizardType (int index)
{
switch (index)
{
case 0: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::GUIAppWizard());
case 1: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::AnimatedAppWizard());
case 2: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::OpenGLAppWizard());
case 3: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::ConsoleAppWizard());
case 4: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::AudioAppWizard());
case 5: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::AudioPluginAppWizard());
case 6: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::StaticLibraryWizard());
case 7: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::DynamicLibraryWizard());
case 8: return std::unique_ptr<NewProjectWizard> (new NewProjectWizardClasses::BlankAppWizard());
default: jassertfalse; break;
}
return {};
}
static StringArray getWizardNames()
{
StringArray s;
for (int i = 0; i < getNumWizards(); ++i)
s.add (createWizardType (i)->getName());
return s;
}
};
Component* createNewProjectWizardComponent()
{
return new NewProjectWizardClasses::StartPageComponent();
}

+ 0
- 505
extras/Projucer/Source/Wizards/jucer_NewProjectWizardComponent.h View File

@@ -1,505 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
class ModulesFolderPathBox : public Component
{
public:
ModulesFolderPathBox (String initialFileOrDirectory)
: currentPathBox ("currentPathBox"),
openFolderButton (TRANS("...")),
modulesLabel (String(), TRANS("Modules Folder") + ":"),
useGlobalPathsToggle ("Use global module path")
{
if (initialFileOrDirectory.isEmpty())
initialFileOrDirectory = getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString();
setModulesFolder (initialFileOrDirectory);
addAndMakeVisible (currentPathBox);
currentPathBox.setEditableText (true);
currentPathBox.onChange = [this] { setModulesFolder (File::getCurrentWorkingDirectory()
.getChildFile (currentPathBox.getText())); };
addAndMakeVisible (openFolderButton);
openFolderButton.setTooltip (TRANS ("Select JUCE modules folder"));
openFolderButton.onClick = [this] { selectJuceFolder(); };
addAndMakeVisible (modulesLabel);
modulesLabel.attachToComponent (&currentPathBox, true);
auto updateEnablement = [this]
{
isUsingGlobalPaths = useGlobalPathsToggle.getToggleState();
currentPathBox.setEnabled (! isUsingGlobalPaths);
openFolderButton.setEnabled (! isUsingGlobalPaths);
modulesLabel.setEnabled (! isUsingGlobalPaths);
};
addAndMakeVisible (useGlobalPathsToggle);
useGlobalPathsToggle.setToggleState (true, sendNotification);
useGlobalPathsToggle.onClick = [updateEnablement] { updateEnablement(); };
updateEnablement();
}
void resized() override
{
auto b = getLocalBounds();
auto topSlice = b.removeFromTop (b.getHeight() / 2);
openFolderButton.setBounds (topSlice.removeFromRight (30));
modulesLabel.setBounds (topSlice.removeFromLeft (110));
currentPathBox.setBounds (topSlice);
b.removeFromTop (5);
useGlobalPathsToggle.setBounds (b.translated (20, 0));
}
static bool selectJuceFolder (File& result)
{
for (;;)
{
FileChooser fc ("Select your JUCE modules folder...",
{ getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString() },
"*");
if (! fc.browseForDirectory())
return false;
if (isJUCEModulesFolder (fc.getResult()))
{
result = fc.getResult();
return true;
}
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
"Not a valid JUCE modules folder!",
"Please select the folder containing your juce_* modules!\n\n"
"This is required so that the new project can be given some essential core modules.");
}
}
void selectJuceFolder()
{
File result;
if (selectJuceFolder (result))
setModulesFolder (result);
}
void setModulesFolder (const File& newFolder)
{
if (modulesFolder != newFolder)
{
modulesFolder = newFolder;
currentPathBox.setText (modulesFolder.getFullPathName(), dontSendNotification);
}
}
File modulesFolder;
bool isUsingGlobalPaths = true;
private:
ComboBox currentPathBox;
TextButton openFolderButton;
Label modulesLabel;
ToggleButton useGlobalPathsToggle;
};
/** The target platforms chooser for the chosen template. */
class PlatformTargetsComp : public Component,
private ListBoxModel
{
public:
PlatformTargetsComp()
{
setOpaque (false);
const Array<ProjectExporter::ExporterTypeInfo> types (ProjectExporter::getExporterTypes());
for (auto& type : types)
{
platforms.add (new PlatformType { type.getIcon(), type.name });
addAndMakeVisible (toggles.add (new ToggleButton (String())));
}
listBox.setRowHeight (30);
listBox.setModel (this);
listBox.setOpaque (false);
listBox.setMultipleSelectionEnabled (true);
listBox.setClickingTogglesRowSelection (true);
listBox.setColour (ListBox::backgroundColourId, Colours::transparentBlack);
addAndMakeVisible (listBox);
selectDefaultExporterIfNoneSelected();
}
StringArray getSelectedPlatforms() const
{
StringArray list;
for (int i = 0; i < platforms.size(); ++i)
if (listBox.isRowSelected (i))
list.add (platforms.getUnchecked(i)->name);
return list;
}
void selectDefaultExporterIfNoneSelected()
{
if (listBox.getNumSelectedRows() == 0)
{
for (int i = platforms.size(); --i >= 0;)
{
if (platforms.getUnchecked(i)->name == ProjectExporter::getCurrentPlatformExporterName())
{
listBox.selectRow (i);
break;
}
}
}
}
void resized() override
{
listBox.setBounds (getLocalBounds());
}
int getNumRows() override
{
return platforms.size();
}
void paintListBoxItem (int rowNumber, Graphics& g, int width, int height, bool rowIsSelected) override
{
ignoreUnused (width);
if (auto* platform = platforms[rowNumber])
{
auto bounds = getLocalBounds().withHeight (height).withTrimmedBottom (1);
g.setColour (findColour (rowNumber % 2 == 0 ? widgetBackgroundColourId
: secondaryWidgetBackgroundColourId));
g.fillRect (bounds);
bounds.removeFromLeft (10);
auto toggleBounds = bounds.removeFromLeft (height);
drawToggle (g, toggleBounds, rowIsSelected);
auto iconBounds = bounds.removeFromLeft (height).reduced (5);
g.drawImageWithin (platform->icon, iconBounds.getX(), iconBounds.getY(), iconBounds.getWidth(),
iconBounds.getHeight(), RectanglePlacement::fillDestination);
bounds.removeFromLeft (10);
g.setColour (findColour (widgetTextColourId));
g.drawFittedText (platform->name, bounds, Justification::centredLeft, 1);
}
}
void selectedRowsChanged (int) override
{
selectDefaultExporterIfNoneSelected();
}
private:
struct PlatformType
{
Image icon;
String name;
};
void drawToggle (Graphics& g, Rectangle<int> bounds, bool isToggled)
{
auto sideLength = jmin (bounds.getWidth(), bounds.getHeight());
bounds = bounds.withSizeKeepingCentre (sideLength, sideLength).reduced (4);
g.setColour (findColour (ToggleButton::tickDisabledColourId));
g.drawRoundedRectangle (bounds.toFloat(), 2.0f, 1.0f);
if (isToggled)
{
g.setColour (findColour (ToggleButton::tickColourId));
const auto tick = getTickShape (0.75f);
g.fillPath (tick, tick.getTransformToScaleToFit (bounds.reduced (4, 5).toFloat(), false));
}
}
Path getTickShape (float height)
{
static const unsigned char pathData[] = { 110,109,32,210,202,64,126,183,148,64,108,39,244,247,64,245,76,124,64,108,178,131,27,65,246,76,252,64,108,175,242,4,65,246,76,252,
64,108,236,5,68,65,0,0,160,180,108,240,150,90,65,21,136,52,63,108,48,59,16,65,0,0,32,65,108,32,210,202,64,126,183,148,64, 99,101,0,0 };
Path path;
path.loadPathFromData (pathData, sizeof (pathData));
path.scaleToFit (0, 0, height * 2.0f, height, true);
return path;
}
ListBox listBox;
OwnedArray<PlatformType> platforms;
OwnedArray<ToggleButton> toggles;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PlatformTargetsComp)
};
//==============================================================================
/**
The Component for project creation.
Features a file browser to select project destination and
a list box of platform targets to generate.
*/
class WizardComp : public Component,
private FileBrowserListener
{
public:
WizardComp()
: platformTargets(),
projectName (TRANS("Project name")),
modulesPathBox (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString())
{
setOpaque (false);
addChildAndSetID (&projectName, "projectName");
projectName.setText ("NewProject");
nameLabel.attachToComponent (&projectName, true);
projectName.onTextChange = [this]
{
updateCreateButton();
fileBrowser.setFileName (File::createLegalFileName (projectName.getText()));
};
addChildAndSetID (&projectType, "projectType");
projectType.addItemList (getWizardNames(), 1);
projectType.setSelectedId (1, dontSendNotification);
typeLabel.attachToComponent (&projectType, true);
projectType.onChange = [this] { updateFileCreationTypes(); };
addChildAndSetID (&fileOutline, "fileOutline");
fileOutline.setColour (GroupComponent::outlineColourId, Colours::black.withAlpha (0.2f));
fileOutline.setTextLabelPosition (Justification::centred);
addChildAndSetID (&targetsOutline, "targetsOutline");
targetsOutline.setColour (GroupComponent::outlineColourId, Colours::black.withAlpha (0.2f));
targetsOutline.setTextLabelPosition (Justification::centred);
addChildAndSetID (&platformTargets, "platformTargets");
addChildAndSetID (&fileBrowser, "fileBrowser");
fileBrowser.setFilenameBoxLabel ("Folder:");
fileBrowser.setFileName (File::createLegalFileName (projectName.getText()));
fileBrowser.addListener (this);
addChildAndSetID (&createButton, "createButton");
createButton.onClick = [this] { createProject(); };
addChildAndSetID (&cancelButton, "cancelButton");
cancelButton.addShortcut (KeyPress (KeyPress::escapeKey));
cancelButton.onClick = [this] { returnToTemplatesPage(); };
addChildAndSetID (&modulesPathBox, "modulesPathBox");
addChildAndSetID (&filesToCreate, "filesToCreate");
filesToCreateLabel.attachToComponent (&filesToCreate, true);
updateFileCreationTypes();
updateCreateButton();
lookAndFeelChanged();
}
void paint (Graphics& g) override
{
g.fillAll (findColour (backgroundColourId));
}
void resized() override
{
auto r = getLocalBounds();
auto left = r.removeFromLeft (getWidth() / 2).reduced (15);
auto right = r.reduced (15);
projectName.setBounds (left.removeFromTop (22).withTrimmedLeft (120));
left.removeFromTop (20);
projectType.setBounds (left.removeFromTop (22).withTrimmedLeft (120));
left.removeFromTop (20);
fileOutline.setBounds (left);
fileBrowser.setBounds (left.reduced (25));
auto buttons = right.removeFromBottom (30);
right.removeFromBottom (10);
createButton.setBounds (buttons.removeFromRight (130));
buttons.removeFromRight (10);
cancelButton.setBounds (buttons.removeFromRight (130));
filesToCreate.setBounds (right.removeFromTop (22).withTrimmedLeft (150));
right.removeFromTop (20);
modulesPathBox.setBounds (right.removeFromTop (50));
right.removeFromTop (20);
targetsOutline.setBounds (right);
platformTargets.setBounds (right.reduced (25));
}
void returnToTemplatesPage()
{
if (auto* parent = findParentComponentOfClass<SlidingPanelComponent>())
{
if (parent->getNumTabs() > 0)
parent->goToTab (parent->getCurrentTabIndex() - 1);
}
else
{
jassertfalse;
}
}
void createProject()
{
auto* mw = Component::findParentComponentOfClass<MainWindow>();
jassert (mw != nullptr);
std::unique_ptr<NewProjectWizardClasses::NewProjectWizard> wizard = createWizard();
if (wizard != nullptr)
{
Result result (wizard->processResultsFromSetupItems (*this));
if (result.failed())
{
AlertWindow::showMessageBox (AlertWindow::WarningIcon,
TRANS("Create Project"),
result.getErrorMessage());
return;
}
wizard->modulesFolder = modulesPathBox.isUsingGlobalPaths ? File (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString())
: modulesPathBox.modulesFolder;
if (! isJUCEModulesFolder (wizard->modulesFolder))
{
if (modulesPathBox.isUsingGlobalPaths)
AlertWindow::showMessageBox (AlertWindow::AlertIconType::WarningIcon, "Invalid Global Path",
"Your global JUCE module search path is invalid. Please select the folder containing your JUCE modules "
"to set as the default path.");
if (! wizard->selectJuceFolder())
return;
if (modulesPathBox.isUsingGlobalPaths)
{
getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).setValue (wizard->modulesFolder.getFullPathName(), nullptr);
ProjucerApplication::getApp().rescanJUCEPathModules();
}
}
auto projectDir = fileBrowser.getSelectedFile (0);
std::unique_ptr<Project> project (wizard->runWizard (*this, projectName.getText(), projectDir, modulesPathBox.isUsingGlobalPaths));
if (project != nullptr)
{
mw->openFile (project->getFile());
getAppSettings().lastWizardFolder = projectDir.getParentDirectory();
}
}
}
void updateFileCreationTypes()
{
StringArray items;
std::unique_ptr<NewProjectWizardClasses::NewProjectWizard> wizard = createWizard();
if (wizard != nullptr)
items = wizard->getFileCreationOptions();
filesToCreate.clear();
filesToCreate.addItemList (items, 1);
filesToCreate.setSelectedId (1, dontSendNotification);
}
void selectionChanged() override {}
void fileClicked (const File&, const MouseEvent&) override {}
void fileDoubleClicked (const File&) override {}
void browserRootChanged (const File&) override
{
fileBrowser.setFileName (File::createLegalFileName (projectName.getText()));
}
int getFileCreationComboID() const
{
return filesToCreate.getSelectedItemIndex();
}
ComboBox projectType, filesToCreate;
PlatformTargetsComp platformTargets;
private:
TextEditor projectName;
Label nameLabel { {}, TRANS("Project Name") + ":" };
Label typeLabel { {}, TRANS("Project Type") + ":" };
Label filesToCreateLabel { {}, TRANS("Files to Auto-Generate") + ":" };
FileBrowserComponent fileBrowser { FileBrowserComponent::saveMode
| FileBrowserComponent::canSelectDirectories
| FileBrowserComponent::doNotClearFileNameOnRootChange,
NewProjectWizardClasses::getLastWizardFolder(), nullptr, nullptr };
GroupComponent fileOutline { {}, TRANS("Project Folder") + ":" };
GroupComponent targetsOutline { {}, TRANS("Target Platforms") + ":" };
TextButton createButton { TRANS("Create") + "..." };
TextButton cancelButton { TRANS("Cancel") };
ModulesFolderPathBox modulesPathBox;
std::unique_ptr<NewProjectWizardClasses::NewProjectWizard> createWizard()
{
return createWizardType (projectType.getSelectedItemIndex());
}
void updateCreateButton()
{
createButton.setEnabled (projectName.getText().trim().isNotEmpty());
}
void lookAndFeelChanged() override
{
projectName.setColour (TextEditor::backgroundColourId, findColour (backgroundColourId));
projectName.setColour (TextEditor::textColourId, findColour (defaultTextColourId));
projectName.setColour (TextEditor::outlineColourId, findColour (defaultTextColourId));
projectName.applyFontToAllText (projectName.getFont());
fileBrowser.resized();
}
};

+ 0
- 112
extras/Projucer/Source/Wizards/jucer_ProjectWizard_Animated.h View File

@@ -1,112 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
struct AnimatedAppWizard : public NewProjectWizard
{
AnimatedAppWizard() {}
String getName() const override { return TRANS("Animated Application"); }
String getDescription() const override { return TRANS("Creates an application which draws an animated graphical display."); }
const char* getIcon() const override { return BinaryData::wizard_AnimatedApp_svg; }
StringArray getFileCreationOptions() override
{
return { "Create header and implementation files",
"Create header file only" };
}
Result processResultsFromSetupItems (WizardComp& setupComp) override
{
createCppFile = false;
switch (setupComp.getFileCreationComboID())
{
case 0: createCppFile = true; break;
case 1: break;
default: jassertfalse; break;
}
return Result::ok();
}
bool initialiseProject (Project& project) override
{
createSourceFolder();
File mainCppFile = getSourceFilesFolder().getChildFile ("Main.cpp");
File contentCompCpp = getSourceFilesFolder().getChildFile ("MainComponent.cpp");
File contentCompH = contentCompCpp.withFileExtension (".h");
String contentCompName = "MainComponent";
project.setProjectType (build_tools::ProjectType_GUIApp::getTypeName());
Project::Item sourceGroup (createSourceGroup (project));
setExecutableNameForAllTargets (project, File::createLegalFileName (appTitle));
auto juceHeaderInclude = CodeHelpers::createIncludePathIncludeStatement (Project::getJuceSourceHFilename());
auto appHeaders = juceHeaderInclude + newLine + CodeHelpers::createIncludeStatement (contentCompH, mainCppFile);
// create main window
String windowH = project.getFileTemplate (createCppFile ? "jucer_AnimatedComponentTemplate_h"
: "jucer_AnimatedComponentSimpleTemplate_h")
.replace ("%%include_juce%%", juceHeaderInclude)
.replace ("%%content_component_class%%", contentCompName, false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (contentCompH, windowH))
failedFiles.add (contentCompH.getFullPathName());
sourceGroup.addFileAtIndex (contentCompH, -1, false);
if (createCppFile)
{
String windowCpp = project.getFileTemplate ("jucer_AnimatedComponentTemplate_cpp")
.replace ("%%include_juce%%", juceHeaderInclude)
.replace ("%%include_corresponding_header%%", CodeHelpers::createIncludeStatement (contentCompH, contentCompCpp), false)
.replace ("%%content_component_class%%", contentCompName, false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (contentCompCpp, windowCpp))
failedFiles.add (contentCompCpp.getFullPathName());
sourceGroup.addFileAtIndex (contentCompCpp, -1, true);
}
// create main cpp
String mainCpp = project.getFileTemplate ("jucer_MainTemplate_SimpleWindow_cpp")
.replace ("%%app_headers%%", appHeaders, false)
.replace ("%%app_class_name%%", build_tools::makeValidIdentifier (appTitle + "Application", false, true, false), false)
.replace ("%%content_component_class%%", contentCompName, false)
.replace ("%%allow_more_than_one_instance%%", "true", false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (mainCppFile, mainCpp))
failedFiles.add (mainCppFile.getFullPathName());
sourceGroup.addFileAtIndex (mainCppFile,-1, true);
return true;
}
private:
bool createCppFile;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AnimatedAppWizard)
};

+ 0
- 121
extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioApp.h View File

@@ -1,121 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
struct AudioAppWizard : public NewProjectWizard
{
AudioAppWizard() {}
String getName() const override { return TRANS("Audio Application"); }
String getDescription() const override { return TRANS("Creates a JUCE application with a single window component and audio and MIDI in/out functions."); }
const char* getIcon() const override { return BinaryData::wizard_AudioApp_svg; }
StringArray getFileCreationOptions() override
{
return { "Create header and implementation files",
"Create header file only" };
}
Result processResultsFromSetupItems (WizardComp& setupComp) override
{
createCppFile = false;
switch (setupComp.getFileCreationComboID())
{
case 0: createCppFile = true; break;
case 1: break;
default: jassertfalse; break;
}
return Result::ok();
}
bool initialiseProject (Project& project) override
{
createSourceFolder();
File mainCppFile = getSourceFilesFolder().getChildFile ("Main.cpp");
File contentCompCpp = getSourceFilesFolder().getChildFile ("MainComponent.cpp");
File contentCompH = contentCompCpp.withFileExtension (".h");
String contentCompName = "MainComponent";
project.setProjectType (build_tools::ProjectType_GUIApp::getTypeName());
Project::Item sourceGroup (createSourceGroup (project));
setExecutableNameForAllTargets (project, File::createLegalFileName (appTitle));
auto juceHeaderInclude = CodeHelpers::createIncludePathIncludeStatement (Project::getJuceSourceHFilename());
auto appHeaders = juceHeaderInclude + newLine + CodeHelpers::createIncludeStatement (contentCompH, mainCppFile);
// create main window
String windowH = project.getFileTemplate (createCppFile ? "jucer_AudioComponentTemplate_h"
: "jucer_AudioComponentSimpleTemplate_h")
.replace ("%%include_juce%%", juceHeaderInclude)
.replace ("%%content_component_class%%", contentCompName, false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (contentCompH, windowH))
failedFiles.add (contentCompH.getFullPathName());
sourceGroup.addFileAtIndex (contentCompH, -1, false);
if (createCppFile)
{
String windowCpp = project.getFileTemplate ("jucer_AudioComponentTemplate_cpp")
.replace ("%%include_juce%%", juceHeaderInclude)
.replace ("%%include_corresponding_header%%", CodeHelpers::createIncludeStatement (contentCompH, contentCompCpp), false)
.replace ("%%content_component_class%%", contentCompName, false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (contentCompCpp, windowCpp))
failedFiles.add (contentCompCpp.getFullPathName());
sourceGroup.addFileAtIndex (contentCompCpp, -1, true);
}
// create main cpp
String mainCpp = project.getFileTemplate ("jucer_MainTemplate_SimpleWindow_cpp")
.replace ("%%app_headers%%", appHeaders, false)
.replace ("%%app_class_name%%", build_tools::makeValidIdentifier (appTitle + "Application", false, true, false), false)
.replace ("%%content_component_class%%", contentCompName, false)
.replace ("%%allow_more_than_one_instance%%", "true", false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (mainCppFile, mainCpp))
failedFiles.add (mainCppFile.getFullPathName());
sourceGroup.addFileAtIndex (mainCppFile, -1, true);
return true;
}
StringArray getDefaultModules() override
{
StringArray s (NewProjectWizard::getDefaultModules());
s.addIfNotAlreadyThere ("juce_audio_utils");
return s;
}
private:
bool createCppFile;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioAppWizard)
};

+ 0
- 105
extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioPlugin.h View File

@@ -1,105 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
struct AudioPluginAppWizard : public NewProjectWizard
{
AudioPluginAppWizard() {}
String getName() const override { return TRANS("Audio Plug-In"); }
String getDescription() const override { return TRANS("Creates a VST/AU/RTAS/AAX audio plug-in. This template features a single window GUI and Audio/MIDI IO functions."); }
const char* getIcon() const override { return BinaryData::wizard_AudioPlugin_svg; }
StringArray getDefaultModules() override
{
StringArray s (NewProjectWizard::getDefaultModules());
s.add ("juce_audio_plugin_client");
s.add ("juce_audio_utils");
return s;
}
bool initialiseProject (Project& project) override
{
createSourceFolder();
String filterClassName = build_tools::makeValidIdentifier (appTitle, true, true, false) + "AudioProcessor";
filterClassName = filterClassName.substring (0, 1).toUpperCase() + filterClassName.substring (1);
String editorClassName = filterClassName + "Editor";
File filterCppFile = getSourceFilesFolder().getChildFile ("PluginProcessor.cpp");
File filterHFile = filterCppFile.withFileExtension (".h");
File editorCppFile = getSourceFilesFolder().getChildFile ("PluginEditor.cpp");
File editorHFile = editorCppFile.withFileExtension (".h");
project.setProjectType (build_tools::ProjectType_AudioPlugin::getTypeName());
setExecutableNameForAllTargets (project, File::createLegalFileName (appTitle));
auto juceHeaderInclude = CodeHelpers::createIncludePathIncludeStatement (Project::getJuceSourceHFilename());
String filterCpp = project.getFileTemplate ("jucer_AudioPluginFilterTemplate_cpp")
.replace ("%%filter_headers%%", CodeHelpers::createIncludeStatement (filterHFile, filterCppFile)
+ newLine + CodeHelpers::createIncludeStatement (editorHFile, filterCppFile), false)
.replace ("%%filter_class_name%%", filterClassName, false)
.replace ("%%editor_class_name%%", editorClassName, false);
String filterH = project.getFileTemplate ("jucer_AudioPluginFilterTemplate_h")
.replace ("%%app_headers%%", juceHeaderInclude, false)
.replace ("%%filter_class_name%%", filterClassName, false);
String editorCpp = project.getFileTemplate ("jucer_AudioPluginEditorTemplate_cpp")
.replace ("%%editor_cpp_headers%%", CodeHelpers::createIncludeStatement (filterHFile, filterCppFile)
+ newLine + CodeHelpers::createIncludeStatement (editorHFile, filterCppFile), false)
.replace ("%%filter_class_name%%", filterClassName, false)
.replace ("%%editor_class_name%%", editorClassName, false);
String editorH = project.getFileTemplate ("jucer_AudioPluginEditorTemplate_h")
.replace ("%%editor_headers%%", juceHeaderInclude + newLine + CodeHelpers::createIncludeStatement (filterHFile, filterCppFile), false)
.replace ("%%filter_class_name%%", filterClassName, false)
.replace ("%%editor_class_name%%", editorClassName, false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (filterCppFile, filterCpp))
failedFiles.add (filterCppFile.getFullPathName());
if (!build_tools::overwriteFileWithNewDataIfDifferent (filterHFile, filterH))
failedFiles.add (filterHFile.getFullPathName());
if (!build_tools::overwriteFileWithNewDataIfDifferent (editorCppFile, editorCpp))
failedFiles.add (editorCppFile.getFullPathName());
if (!build_tools::overwriteFileWithNewDataIfDifferent (editorHFile, editorH))
failedFiles.add (editorHFile.getFullPathName());
Project::Item sourceGroup (createSourceGroup (project));
sourceGroup.addFileAtIndex (filterCppFile, -1, true);
sourceGroup.addFileAtIndex (filterHFile, -1, false);
sourceGroup.addFileAtIndex (editorCppFile, -1, true);
sourceGroup.addFileAtIndex (editorHFile, -1, false);
project.getConfigFlag ("JUCE_VST3_CAN_REPLACE_VST2") = 0;
return true;
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginAppWizard)
};

+ 0
- 42
extras/Projucer/Source/Wizards/jucer_ProjectWizard_Blank.h View File

@@ -1,42 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
struct BlankAppWizard : public NewProjectWizard
{
BlankAppWizard() {}
String getName() const override { return TRANS("Empty Application"); }
String getDescription() const override { return TRANS("Creates a blank JUCE GUI application."); }
const char* getIcon() const override { return BinaryData::wizard_GUI_svg; }
bool initialiseProject (Project& project) override
{
createSourceFolder();
project.setProjectType (build_tools::ProjectType_GUIApp::getTypeName());
Project::Item sourceGroup (createSourceGroup (project));
setExecutableNameForAllTargets (project, File::createLegalFileName (appTitle));
return true;
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BlankAppWizard)
};

+ 0
- 81
extras/Projucer/Source/Wizards/jucer_ProjectWizard_Console.h View File

@@ -1,81 +0,0 @@
/*
==============================================================================
This file is part of the JUCE 6 technical preview.
Copyright (c) 2020 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For this technical preview, this file is not subject to commercial licensing.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
#pragma once
//==============================================================================
struct ConsoleAppWizard : public NewProjectWizard
{
ConsoleAppWizard() {}
String getName() const override { return TRANS("Console Application"); }
String getDescription() const override { return TRANS("Creates a command-line application without GUI support."); }
const char* getIcon() const override { return BinaryData::wizard_ConsoleApp_svg; }
StringArray getFileCreationOptions() override
{
return { "Create a Main.cpp file",
"Don't create any files" };
}
Result processResultsFromSetupItems (WizardComp& setupComp) override
{
createMainCpp = false;
switch (setupComp.getFileCreationComboID())
{
case 0: createMainCpp = true; break;
case 1: break;
default: jassertfalse; break;
}
return Result::ok();
}
bool initialiseProject (Project& project) override
{
createSourceFolder();
project.setProjectType (build_tools::ProjectType_ConsoleApp::getTypeName());
Project::Item sourceGroup (createSourceGroup (project));
setExecutableNameForAllTargets (project, File::createLegalFileName (appTitle));
if (createMainCpp)
{
File mainCppFile = getSourceFilesFolder().getChildFile ("Main.cpp");
String mainCpp = project.getFileTemplate ("jucer_MainConsoleAppTemplate_cpp")
.replace ("%%app_headers%%", CodeHelpers::createIncludePathIncludeStatement (Project::getJuceSourceHFilename()), false);
if (!build_tools::overwriteFileWithNewDataIfDifferent (mainCppFile, mainCpp))
failedFiles.add (mainCppFile.getFullPathName());
sourceGroup.addFileAtIndex (mainCppFile, -1, true);
}
return true;
}
private:
bool createMainCpp;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ConsoleAppWizard)
};

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save