mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Introjucer: internal refactoring work.
This commit is contained in:
parent
d42783465b
commit
9113a7d6ab
25 changed files with 1537 additions and 1745 deletions
|
|
@ -142,8 +142,15 @@
|
|||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project/jucer_ConfigPage.cpp"/>
|
||||
<Unit filename="../../Source/Project/jucer_ConfigPage.h">
|
||||
<Unit filename="../../Source/Project/jucer_ConfigTree_Base.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project/jucer_ConfigTree_Exporter.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project/jucer_ConfigTree_Modules.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
|
|
@ -180,8 +187,15 @@
|
|||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project/jucer_ProjectTreeViewBase.cpp"/>
|
||||
<Unit filename="../../Source/Project/jucer_ProjectTreeViewBase.h">
|
||||
<Unit filename="../../Source/Project/jucer_ProjectTree_Base.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project/jucer_ProjectTree_File.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project/jucer_ProjectTree_Group.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
|
|
@ -190,11 +204,6 @@
|
|||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project/jucer_TreeViewTypes.cpp"/>
|
||||
<Unit filename="../../Source/Project/jucer_TreeViewTypes.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
</Unit>
|
||||
<Unit filename="../../Source/Project Saving/jucer_ProjectExport_Android.h">
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
|
|
|
|||
|
|
@ -56,15 +56,12 @@ OBJECTS := \
|
|||
$(OBJDIR)/jucer_Main_f8488f5b.o \
|
||||
$(OBJDIR)/jucer_MainWindow_1e163aeb.o \
|
||||
$(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \
|
||||
$(OBJDIR)/jucer_ConfigPage_99b07caa.o \
|
||||
$(OBJDIR)/jucer_Module_3f7666a5.o \
|
||||
$(OBJDIR)/jucer_NewFileWizard_b8a19ef8.o \
|
||||
$(OBJDIR)/jucer_NewProjectWizard_7a15bf5d.o \
|
||||
$(OBJDIR)/jucer_Project_c131864a.o \
|
||||
$(OBJDIR)/jucer_ProjectContentComponent_60de0eee.o \
|
||||
$(OBJDIR)/jucer_ProjectTreeViewBase_63c2bdbe.o \
|
||||
$(OBJDIR)/jucer_ProjectType_1bc27a24.o \
|
||||
$(OBJDIR)/jucer_TreeViewTypes_4a765287.o \
|
||||
$(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o \
|
||||
$(OBJDIR)/jucer_ResourceFile_6af120d3.o \
|
||||
$(OBJDIR)/jucer_CodeHelpers_c317179c.o \
|
||||
|
|
@ -157,11 +154,6 @@ $(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o: ../../Source/Application/jucer_O
|
|||
@echo "Compiling jucer_OpenDocumentManager.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/jucer_ConfigPage_99b07caa.o: ../../Source/Project/jucer_ConfigPage.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling jucer_ConfigPage.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/jucer_Module_3f7666a5.o: ../../Source/Project/jucer_Module.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling jucer_Module.cpp"
|
||||
|
|
@ -187,21 +179,11 @@ $(OBJDIR)/jucer_ProjectContentComponent_60de0eee.o: ../../Source/Project/jucer_P
|
|||
@echo "Compiling jucer_ProjectContentComponent.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/jucer_ProjectTreeViewBase_63c2bdbe.o: ../../Source/Project/jucer_ProjectTreeViewBase.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling jucer_ProjectTreeViewBase.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/jucer_ProjectType_1bc27a24.o: ../../Source/Project/jucer_ProjectType.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling jucer_ProjectType.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/jucer_TreeViewTypes_4a765287.o: ../../Source/Project/jucer_TreeViewTypes.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling jucer_TreeViewTypes.cpp"
|
||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
|
||||
|
||||
$(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o: ../../Source/Project\ Saving/jucer_ProjectExporter.cpp
|
||||
-@mkdir -p $(OBJDIR)
|
||||
@echo "Compiling jucer_ProjectExporter.cpp"
|
||||
|
|
|
|||
|
|
@ -20,15 +20,12 @@
|
|||
95B44E6C74B1DED31DBE37EB = { isa = PBXBuildFile; fileRef = 8C52A3DDA62A746AA7A68535; };
|
||||
AA9D0B8E23F3D87A23DE9F8A = { isa = PBXBuildFile; fileRef = 9069981E414A631B036CC9AC; };
|
||||
244BA1BDA5FAA465EA3F9C6D = { isa = PBXBuildFile; fileRef = 2247EE920DF0610CAF9F4513; };
|
||||
D1A1998A202A88C617C9AB73 = { isa = PBXBuildFile; fileRef = E7F7033084AC10FB77B0F77A; };
|
||||
3FCA61C401007B243E2E9035 = { isa = PBXBuildFile; fileRef = F797071D88542C813CF7222A; };
|
||||
5BC89E7905397ABECD25ACCD = { isa = PBXBuildFile; fileRef = F1163B7856FDABA413A88D90; };
|
||||
FBE57B26FE59319AA2E8B59D = { isa = PBXBuildFile; fileRef = 69A5D13490A62DAE9A7D5A22; };
|
||||
30B921C38DCEE787B294B746 = { isa = PBXBuildFile; fileRef = BAC43B20E14A340CCF14119C; };
|
||||
676D2E1E750E61AA2FAA335E = { isa = PBXBuildFile; fileRef = 86E468DE6556BB2AD76A3D80; };
|
||||
9CBD0A9A700D28081C8182C5 = { isa = PBXBuildFile; fileRef = 4BAF0975F0958432B17D0D41; };
|
||||
8012E6487639A7368E4C4470 = { isa = PBXBuildFile; fileRef = E70CA21960A64CCB835725FF; };
|
||||
B18DEBB2CBB335AFAE249E8E = { isa = PBXBuildFile; fileRef = F94ACCC426AB439B871699E3; };
|
||||
1F37544891EC8DBB5E500C1C = { isa = PBXBuildFile; fileRef = F71AF6D2DF3E652F8B51EBAB; };
|
||||
110221CD5578153B528AD2BE = { isa = PBXBuildFile; fileRef = D10D51A0A2D63F38B4D86A60; };
|
||||
CD4F7B119CE718BCE78D61F4 = { isa = PBXBuildFile; fileRef = 9B9CAD20E1243B4351B4C8D8; };
|
||||
|
|
@ -251,6 +248,7 @@
|
|||
35E6EE1E98DD7050DDFECD9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ContentCompTemplate.h"; path = "../../Source/BinaryData/jucer_ContentCompTemplate.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
364D1A9B113320407A7E57B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; };
|
||||
36981345C70DCC6B95DEC59C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Initialisation.h"; path = "../../../../modules/juce_events/messages/juce_Initialisation.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
375AFDF06A908D89DEC5205F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTree_Base.h"; path = "../../Source/Project/jucer_ProjectTree_Base.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
37A0A38C2B5825B9A302879C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
3804BE13635F779ACB8C5491 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
38CE1587800D612BA0C394A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationBase.h"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -294,6 +292,7 @@
|
|||
467A5E1882A75E01876A8C4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
46C2D683A917A9D3729EEAC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
472F9A90F685220D730EBF6C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; };
|
||||
47B49049B85EED74D29C9906 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTree_File.h"; path = "../../Source/Project/jucer_ProjectTree_File.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
47DD50A5A9091F9900E0EAD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_JucerTreeViewBase.cpp"; path = "../../Source/Utility/jucer_JucerTreeViewBase.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
47F4C6341177140302CE802A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
48A2FBB4CB48AC4FCA796F2F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ContainerDeletePolicy.h"; path = "../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -306,7 +305,6 @@
|
|||
4AE0078871D92B6085C28313 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AlertWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
4AF755C65E352951D80FB93B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
4B98FC7F079F93BCC4D65C86 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
4BAF0975F0958432B17D0D41 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectTreeViewBase.cpp"; path = "../../Source/Project/jucer_ProjectTreeViewBase.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
4BC9122A6E6496EAF716560E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
4C150A1BF98D747EC218A602 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
4C2093BCD3528ACEDC7A2B33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ImageButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_ImageButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -320,6 +318,7 @@
|
|||
4E60769DE992CA7FC1A4A486 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutineEditor.h"; path = "../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
4E8FE9B1B8C90FC28D56523B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementEllipse.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementEllipse.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
4F5843D423E67797070115B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
4F6365A0D2D51337151D85C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTree_Group.h"; path = "../../Source/Project/jucer_ProjectTree_Group.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
4F687965FBE86EAFDB3ACFEC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; };
|
||||
4F88933C6D2AB8A83EB14E16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinkedListPointer.h"; path = "../../../../modules/juce_core/containers/juce_LinkedListPointer.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
50498FF6EA3901CBD58223B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ObjectTypes.h"; path = "../../Source/ComponentEditor/jucer_ObjectTypes.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -453,6 +452,7 @@
|
|||
79B3DE19D706135161A727B0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDiff.h"; path = "../../../../modules/juce_core/text/juce_TextDiff.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
79F7CC3E9B848AAA3A5C682B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
7A3E96D22F1C9EB4C739834F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PointComponent.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PointComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
7B4E33B1E04139F359FB484B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigTree_Exporter.h"; path = "../../Source/Project/jucer_ConfigTree_Exporter.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
7B824A2F1BBE334B140BD8AF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
7C02936574E000C436E3AD8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
7C48EA717C5B1136A39FF4FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -507,6 +507,7 @@
|
|||
8DDA82E1200B61D3B6C526E8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
8E00CF4CE2305C5CE5B60E37 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
8F30A53C7FE4BC65171FB3E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerDocument.h"; path = "../../Source/ComponentEditor/jucer_JucerDocument.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
8F8BF1A7130D858E0A239F9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigTree_Base.h"; path = "../../Source/Project/jucer_ConfigTree_Base.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
8FF39B6B0D9DEB5BBE388A6F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
9069981E414A631B036CC9AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainWindow.cpp"; path = "../../Source/Application/jucer_MainWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
90BD70D106A80947463BCB1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -516,7 +517,6 @@
|
|||
915ACCF56213FACAB42B427D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
920DA9E20EB14DD7D6139DD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
921752D9B004A15973DDF56F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_TestComponent.cpp"; path = "../../Source/ComponentEditor/ui/jucer_TestComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
922DB1DA01DAF63CE86B5E53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTreeViewBase.h"; path = "../../Source/Project/jucer_ProjectTreeViewBase.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
925CC15E1449AED03A1CE4F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
92F91DC29B64AD85B1F508BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GenericComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_GenericComponentHandler.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
93260AA1B96F74E928B7B07C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringRef.h"; path = "../../../../modules/juce_core/text/juce_StringRef.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -576,6 +576,7 @@
|
|||
9F26333042DFB93B7DFEC870 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
9F41F3338BF00D0FC74C6390 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TestComponent.h"; path = "../../Source/ComponentEditor/ui/jucer_TestComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
9F5483F3EEF0A1E0C71B95A5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
9F75811FE7B5F8D1321BEC69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigTree_Modules.h"; path = "../../Source/Project/jucer_ConfigTree_Modules.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
9F7896DA332F9718CAB6B162 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
A004A03A932CDECDED29F19C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
A071CAC9920625A3707CF949 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -666,7 +667,6 @@
|
|||
BA5C7DE347A73A87F687703C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
BA95268EEE80F9509EC1F76F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
BAC43B20E14A340CCF14119C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Project.cpp"; path = "../../Source/Project/jucer_Project.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
BBA6060656F685ED7FA52045 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeViewTypes.h"; path = "../../Source/Project/jucer_TreeViewTypes.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
BC17B02633EF1E31024051C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
BCAD13352CE76BA81629A6E7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableText.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
BCCFDFB2C02C4AA436C0ECF8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SliderHandler.h"; path = "../../Source/ComponentEditor/components/jucer_SliderHandler.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -685,7 +685,6 @@
|
|||
C094F3B6A65A79A6DF87C9C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementGroup.h"; path = "../../Source/ComponentEditor/paintelements/jucer_PaintElementGroup.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C187718F7B9EBA88584B43F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutine.cpp"; path = "../../Source/ComponentEditor/jucer_PaintRoutine.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
C1FDD2DDB01AC8C4DECB2C10 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
C2080119AEDFDE0D477756FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ConfigPage.h"; path = "../../Source/Project/jucer_ConfigPage.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C22E03FEBEB6921978C5612A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C2D43E4F571D16F0E9B1E44E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C2ECD077AC4C784A67BC3DDE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -710,9 +709,11 @@
|
|||
C83992DA0BE30EA3CD06EA98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C85B4D62B96F4A44890F20E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C8A229ACD244F402C57286CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_MSVC.h"; path = "../../Source/Project Saving/jucer_ProjectExport_MSVC.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C90C66C5727759D5CBD5FB07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
C9616830BB2474066AC8C910 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ResourceFile.h"; path = "../../Source/Project Saving/jucer_ResourceFile.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C9871C46DEDD05103443DC33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
C9DCA94BF8A4C583E5392755 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
CA62F9F7C5F0D77D8E33D91F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
CB36CD7F57D0F4231DC98686 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
CB48495010366C2E371BEFDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemStats.cpp"; path = "../../../../modules/juce_core/system/juce_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
CBE0B96838EE76C9CB8E1230 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourGradient.cpp"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -725,7 +726,6 @@
|
|||
CDDF5BDC75277F7B83A38885 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
CDF8F65F9079B2C14A740F0F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
CE1DFE4E3908943656E180AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
CF0615A1AF1A514A60322B50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
CF21D9DB3AEC0A4DCAB36A99 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Icons.cpp"; path = "../../Source/Utility/jucer_Icons.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
CF6C8BD0DA3D8CD4E99EBADA = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||
CF8011B3C67B609032974DA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewCppFileTemplate.cpp"; path = "../../Source/BinaryData/jucer_NewCppFileTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -741,6 +741,7 @@
|
|||
D2F80DA0946A5EE01FC016CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D374DC78AAC02504576AA9B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GroupComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_GroupComponentHandler.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D376B9B54EC944E766AFEC45 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
D3E139185095C486DD3D61F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationTool.h"; path = "../../Source/Utility/jucer_TranslationTool.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D4444EC6342A2A7BC4F7BC46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTextProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentTextProperty.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D4697A0232AECE5DAC5E332E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
D4E56676E2EF83404EDCBA8C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -759,49 +760,47 @@
|
|||
D87FC8F6834E9DC9C8E88B94 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JustificationProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_JustificationProperty.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D926E13AB5AD647A7A00F486 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
D92A6E9404A30EED32DCE4ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_RelativePositionedRectangle.h"; path = "../../Source/ComponentEditor/ui/jucer_RelativePositionedRectangle.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D9342535EA61901A1AD816C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
D95D7B49EC6C6BDCB5A1B988 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; };
|
||||
D9B077E2ECDDA94961E134D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DA345D5B9DABD049F90DC96F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GeneratedCode.h"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DAF84A553D264705FA6EB6FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeViewHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TreeViewHandler.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D9E59DE07A815AB303A297D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../../../modules/juce_data_structures/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; };
|
||||
DB20268A566DABEAE3F2CBEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DB876F7873F42DC685A58CA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DBE0CDE1B017190ABBFF557C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_CodeBlocks.h"; path = "../../Source/Project Saving/jucer_ProjectExport_CodeBlocks.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DC5E7FF30B01118F6DAEC38F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DCCB75165B7C73A589498E87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DD2494D5F1C081898D616AF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DD985A60FB76E976AF91852D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DE5F3C9EF6BFFDE73AF9E7FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DF725A596B7BCD7520CC0A9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceEditorPanel.cpp"; path = "../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DF7BB5B6B394EDEEF5F5B4B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E5D6C36496F5BC84D7213BE8 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
E65A820D34BF39478B7C5925 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DocumentEditorComponent.h"; path = "../../Source/Application/jucer_DocumentEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E7F7033084AC10FB77B0F77A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ConfigPage.cpp"; path = "../../Source/Project/jucer_ConfigPage.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E96597BBC6A98255B51B94DC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
|
||||
25F52316D256B4534BED16D1 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Introjucer.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
|
||||
C90C66C5727759D5CBD5FB07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AbstractFifo.cpp"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
CA62F9F7C5F0D77D8E33D91F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SplashScreen.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D3E139185095C486DD3D61F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationTool.h"; path = "../../Source/Utility/jucer_TranslationTool.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D9342535EA61901A1AD816C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
D9E59DE07A815AB303A297D9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../../../modules/juce_data_structures/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; };
|
||||
DC922C6A65D260C18E888E49 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_ComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DCCB75165B7C73A589498E87 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DD00494140C86144306A9356 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DD2494D5F1C081898D616AF5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DE40B42B57F29C650CB7F2AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DE5F3C9EF6BFFDE73AF9E7FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DE8DF5D263F40F65581CFDE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DEF579B1433EB8DEE7AB50F8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Drawable.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DF725A596B7BCD7520CC0A9F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceEditorPanel.cpp"; path = "../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DFC6364D81D9C60BD4CA9D12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E07C56267CBB46FC44EF2026 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E0F9CA57E44F7F7E7E217E47 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentUndoableAction.h"; path = "../../Source/ComponentEditor/components/jucer_ComponentUndoableAction.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E1C16C872E34BCB144B469F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E2374E15D65425C4101237E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewComponentTemplate.h"; path = "../../Source/BinaryData/jucer_NewComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E27F0860F27023BAA9798B46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E284B565DBD647DC0830D23B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E2C1C995D554A3F0A363CE58 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E2DBA3307837B64AFCCD8F8D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E3FF16862AA1B2F943DC616C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E446FFE889CD490FDE3F0F2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E4BB22E27C5AA4B666F265BD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TextButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E4E74B2BC3F3CB5A4F4DC55E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
|
||||
E530742870F07704E9616358 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E5D6C36496F5BC84D7213BE8 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
E65A820D34BF39478B7C5925 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DocumentEditorComponent.h"; path = "../../Source/Application/jucer_DocumentEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E7E1C4F416CFA44BE7DD1A74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E96597BBC6A98255B51B94DC = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
|
||||
25F52316D256B4534BED16D1 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Introjucer.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
|
||||
CF0615A1AF1A514A60322B50 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
D9B077E2ECDDA94961E134D7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DA345D5B9DABD049F90DC96F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GeneratedCode.h"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DAF84A553D264705FA6EB6FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeViewHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TreeViewHandler.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DB876F7873F42DC685A58CA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
DD985A60FB76E976AF91852D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
DF7BB5B6B394EDEEF5F5B4B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallbackMessage.h"; path = "../../../../modules/juce_events/messages/juce_CallbackMessage.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E07C56267CBB46FC44EF2026 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Image.cpp"; path = "../../../../modules/juce_graphics/images/juce_Image.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E1C16C872E34BCB144B469F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E27F0860F27023BAA9798B46 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E3FF16862AA1B2F943DC616C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E4E74B2BC3F3CB5A4F4DC55E = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
|
||||
E54D0994D31E20A0A05EBA2B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E570E57CC1FCEF78B54A7084 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E60E28D1B7491047DEA236AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectContentComponent.h"; path = "../../Source/Project/jucer_ProjectContentComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -815,7 +814,6 @@
|
|||
E7B6A0CBA0D27A095E83F5B7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E7D09B860F4D4A13D4312C38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E7E122AE104E79BB641B07B3 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_data_structures/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
|
||||
E7E1C4F416CFA44BE7DD1A74 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
E7E1D60BC7AEF79AA7B65B7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E82C9EF1A74D867BBFF2090D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
E99F5A31373E9BDEAC40792F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -867,7 +865,6 @@
|
|||
F8AC12B589FCB90E66D84729 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
F8D0F7C0A19B4ADB58454F16 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
F92A6000284C0FDA0A4845CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
F94ACCC426AB439B871699E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_TreeViewTypes.cpp"; path = "../../Source/Project/jucer_TreeViewTypes.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
F994D79D564B5F8D06E6766E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
F9D77BAA08889D69E0C43F25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SystemTrayIconComponent.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
|
||||
FA04E39EE7E83D445AF9E406 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FillType.h"; path = "../../Source/ComponentEditor/paintelements/jucer_FillType.h"; sourceTree = "SOURCE_ROOT"; };
|
||||
|
|
@ -905,8 +902,9 @@
|
|||
563091B0916AD9AAA36C7DC5 ); name = Application; sourceTree = "<group>"; };
|
||||
891F84627A03FA733F37A199 = { isa = PBXGroup; children = (
|
||||
93D03B2BC76998A3BDA747E8,
|
||||
E7F7033084AC10FB77B0F77A,
|
||||
C2080119AEDFDE0D477756FA,
|
||||
8F8BF1A7130D858E0A239F9E,
|
||||
7B4E33B1E04139F359FB484B,
|
||||
9F75811FE7B5F8D1321BEC69,
|
||||
C7B47372A9D5970E3D9A5400,
|
||||
F797071D88542C813CF7222A,
|
||||
7211101FFA28400ADBB1D47A,
|
||||
|
|
@ -919,12 +917,11 @@
|
|||
BF3CEF080FA013E2778DCE90,
|
||||
86E468DE6556BB2AD76A3D80,
|
||||
E60E28D1B7491047DEA236AE,
|
||||
4BAF0975F0958432B17D0D41,
|
||||
922DB1DA01DAF63CE86B5E53,
|
||||
375AFDF06A908D89DEC5205F,
|
||||
47B49049B85EED74D29C9906,
|
||||
4F6365A0D2D51337151D85C3,
|
||||
E70CA21960A64CCB835725FF,
|
||||
B8385E9A644BD3CD94876448,
|
||||
F94ACCC426AB439B871699E3,
|
||||
BBA6060656F685ED7FA52045 ); name = Project; sourceTree = "<group>"; };
|
||||
B8385E9A644BD3CD94876448 ); name = Project; sourceTree = "<group>"; };
|
||||
E345840128627D533DF908AC = { isa = PBXGroup; children = (
|
||||
6E7353DFEA8825B515049ABB,
|
||||
DBE0CDE1B017190ABBFF557C,
|
||||
|
|
@ -1961,15 +1958,12 @@
|
|||
95B44E6C74B1DED31DBE37EB,
|
||||
AA9D0B8E23F3D87A23DE9F8A,
|
||||
244BA1BDA5FAA465EA3F9C6D,
|
||||
D1A1998A202A88C617C9AB73,
|
||||
3FCA61C401007B243E2E9035,
|
||||
5BC89E7905397ABECD25ACCD,
|
||||
FBE57B26FE59319AA2E8B59D,
|
||||
30B921C38DCEE787B294B746,
|
||||
676D2E1E750E61AA2FAA335E,
|
||||
9CBD0A9A700D28081C8182C5,
|
||||
8012E6487639A7368E4C4470,
|
||||
B18DEBB2CBB335AFAE249E8E,
|
||||
1F37544891EC8DBB5E500C1C,
|
||||
110221CD5578153B528AD2BE,
|
||||
CD4F7B119CE718BCE78D61F4,
|
||||
|
|
|
|||
|
|
@ -149,8 +149,9 @@
|
|||
</Filter>
|
||||
<Filter Name="Project">
|
||||
<File RelativePath="..\..\Source\Project\jucer_AudioPluginModule.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigPage.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigPage.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigTree_Base.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigTree_Exporter.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigTree_Modules.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_GroupInformationComponent.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_Module.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_Module.h"/>
|
||||
|
|
@ -163,12 +164,11 @@
|
|||
<File RelativePath="..\..\Source\Project\jucer_Project.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectContentComponent.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectContentComponent.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTreeViewBase.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTreeViewBase.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTree_Base.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTree_File.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTree_Group.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectType.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectType.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_TreeViewTypes.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_TreeViewTypes.h"/>
|
||||
</Filter>
|
||||
<Filter Name="Project Saving">
|
||||
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
|
||||
|
|
|
|||
|
|
@ -149,8 +149,9 @@
|
|||
</Filter>
|
||||
<Filter Name="Project">
|
||||
<File RelativePath="..\..\Source\Project\jucer_AudioPluginModule.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigPage.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigPage.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigTree_Base.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigTree_Exporter.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ConfigTree_Modules.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_GroupInformationComponent.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_Module.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_Module.h"/>
|
||||
|
|
@ -163,12 +164,11 @@
|
|||
<File RelativePath="..\..\Source\Project\jucer_Project.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectContentComponent.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectContentComponent.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTreeViewBase.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTreeViewBase.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTree_Base.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTree_File.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectTree_Group.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectType.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_ProjectType.h"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_TreeViewTypes.cpp"/>
|
||||
<File RelativePath="..\..\Source\Project\jucer_TreeViewTypes.h"/>
|
||||
</Filter>
|
||||
<Filter Name="Project Saving">
|
||||
<File RelativePath="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
|
||||
|
|
|
|||
|
|
@ -134,15 +134,12 @@
|
|||
<ClCompile Include="..\..\Source\Application\jucer_Main.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Application\jucer_MainWindow.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Application\jucer_OpenDocumentManager.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ConfigPage.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_Module.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_NewFileWizard.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_NewProjectWizard.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_Project.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectContentComponent.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectTreeViewBase.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectType.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_TreeViewTypes.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project Saving\jucer_ProjectExporter.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project Saving\jucer_ResourceFile.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Utility\jucer_CodeHelpers.cpp"/>
|
||||
|
|
@ -1022,7 +1019,9 @@
|
|||
<ClInclude Include="..\..\Source\Application\jucer_MainWindow.h"/>
|
||||
<ClInclude Include="..\..\Source\Application\jucer_OpenDocumentManager.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_AudioPluginModule.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigPage.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Base.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Exporter.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Modules.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_GroupInformationComponent.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_Module.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ModulesPanel.h"/>
|
||||
|
|
@ -1030,9 +1029,10 @@
|
|||
<ClInclude Include="..\..\Source\Project\jucer_NewProjectWizard.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_Project.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectContentComponent.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTreeViewBase.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Base.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_File.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Group.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_TreeViewTypes.h"/>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
|
||||
|
|
|
|||
|
|
@ -268,9 +268,6 @@
|
|||
<ClCompile Include="..\..\Source\Application\jucer_OpenDocumentManager.cpp">
|
||||
<Filter>The Introjucer\Application</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ConfigPage.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_Module.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -286,15 +283,9 @@
|
|||
<ClCompile Include="..\..\Source\Project\jucer_ProjectContentComponent.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectTreeViewBase.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectType.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_TreeViewTypes.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project Saving\jucer_ProjectExporter.cpp">
|
||||
<Filter>The Introjucer\Project Saving</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -1332,7 +1323,13 @@
|
|||
<ClInclude Include="..\..\Source\Project\jucer_AudioPluginModule.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigPage.h">
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Base.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Exporter.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Modules.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_GroupInformationComponent.h">
|
||||
|
|
@ -1356,15 +1353,18 @@
|
|||
<ClInclude Include="..\..\Source\Project\jucer_ProjectContentComponent.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTreeViewBase.h">
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Base.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_File.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Group.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectType.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_TreeViewTypes.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h">
|
||||
<Filter>The Introjucer\Project Saving</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -140,15 +140,12 @@
|
|||
<ClCompile Include="..\..\Source\Application\jucer_Main.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Application\jucer_MainWindow.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Application\jucer_OpenDocumentManager.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ConfigPage.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_Module.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_NewFileWizard.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_NewProjectWizard.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_Project.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectContentComponent.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectTreeViewBase.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectType.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_TreeViewTypes.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project Saving\jucer_ProjectExporter.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Project Saving\jucer_ResourceFile.cpp"/>
|
||||
<ClCompile Include="..\..\Source\Utility\jucer_CodeHelpers.cpp"/>
|
||||
|
|
@ -1028,7 +1025,9 @@
|
|||
<ClInclude Include="..\..\Source\Application\jucer_MainWindow.h"/>
|
||||
<ClInclude Include="..\..\Source\Application\jucer_OpenDocumentManager.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_AudioPluginModule.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigPage.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Base.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Exporter.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Modules.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_GroupInformationComponent.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_Module.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ModulesPanel.h"/>
|
||||
|
|
@ -1036,9 +1035,10 @@
|
|||
<ClInclude Include="..\..\Source\Project\jucer_NewProjectWizard.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_Project.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectContentComponent.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTreeViewBase.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Base.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_File.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Group.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"/>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_TreeViewTypes.h"/>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h"/>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_CodeBlocks.h"/>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Make.h"/>
|
||||
|
|
|
|||
|
|
@ -268,9 +268,6 @@
|
|||
<ClCompile Include="..\..\Source\Application\jucer_OpenDocumentManager.cpp">
|
||||
<Filter>The Introjucer\Application</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ConfigPage.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_Module.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -286,15 +283,9 @@
|
|||
<ClCompile Include="..\..\Source\Project\jucer_ProjectContentComponent.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectTreeViewBase.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_ProjectType.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project\jucer_TreeViewTypes.cpp">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\Source\Project Saving\jucer_ProjectExporter.cpp">
|
||||
<Filter>The Introjucer\Project Saving</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -1332,7 +1323,13 @@
|
|||
<ClInclude Include="..\..\Source\Project\jucer_AudioPluginModule.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigPage.h">
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Base.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Exporter.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ConfigTree_Modules.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_GroupInformationComponent.h">
|
||||
|
|
@ -1356,15 +1353,18 @@
|
|||
<ClInclude Include="..\..\Source\Project\jucer_ProjectContentComponent.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTreeViewBase.h">
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Base.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_File.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectTree_Group.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_ProjectType.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project\jucer_TreeViewTypes.h">
|
||||
<Filter>The Introjucer\Project</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Source\Project Saving\jucer_ProjectExport_Android.h">
|
||||
<Filter>The Introjucer\Project Saving</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -118,10 +118,12 @@
|
|||
<GROUP id="vGFZIJg" name="Project">
|
||||
<FILE id="a9a1b" name="jucer_AudioPluginModule.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_AudioPluginModule.h"/>
|
||||
<FILE id="tDp9h9" name="jucer_ConfigPage.cpp" compile="1" resource="0"
|
||||
file="Source/Project/jucer_ConfigPage.cpp"/>
|
||||
<FILE id="tlj7HT" name="jucer_ConfigPage.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ConfigPage.h"/>
|
||||
<FILE id="xYS0qQ" name="jucer_ConfigTree_Base.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ConfigTree_Base.h"/>
|
||||
<FILE id="mLHZta" name="jucer_ConfigTree_Exporter.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ConfigTree_Exporter.h"/>
|
||||
<FILE id="OO3lfM" name="jucer_ConfigTree_Modules.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ConfigTree_Modules.h"/>
|
||||
<FILE id="sQjHbVN" name="jucer_GroupInformationComponent.h" compile="0"
|
||||
resource="0" file="Source/Project/jucer_GroupInformationComponent.h"/>
|
||||
<FILE id="MJkOAX" name="jucer_Module.cpp" compile="1" resource="0"
|
||||
|
|
@ -145,18 +147,16 @@
|
|||
resource="0" file="Source/Project/jucer_ProjectContentComponent.cpp"/>
|
||||
<FILE id="mIJMR08" name="jucer_ProjectContentComponent.h" compile="0"
|
||||
resource="0" file="Source/Project/jucer_ProjectContentComponent.h"/>
|
||||
<FILE id="TL3snCb" name="jucer_ProjectTreeViewBase.cpp" compile="1"
|
||||
resource="0" file="Source/Project/jucer_ProjectTreeViewBase.cpp"/>
|
||||
<FILE id="UwhAsi1" name="jucer_ProjectTreeViewBase.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ProjectTreeViewBase.h"/>
|
||||
<FILE id="UwhAsi1" name="jucer_ProjectTree_Base.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ProjectTree_Base.h"/>
|
||||
<FILE id="wiMMXX" name="jucer_ProjectTree_File.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ProjectTree_File.h"/>
|
||||
<FILE id="WaT0B16" name="jucer_ProjectTree_Group.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ProjectTree_Group.h"/>
|
||||
<FILE id="WQ6fWQ" name="jucer_ProjectType.cpp" compile="1" resource="0"
|
||||
file="Source/Project/jucer_ProjectType.cpp"/>
|
||||
<FILE id="davId" name="jucer_ProjectType.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_ProjectType.h"/>
|
||||
<FILE id="JTbTiIc" name="jucer_TreeViewTypes.cpp" compile="1" resource="0"
|
||||
file="Source/Project/jucer_TreeViewTypes.cpp"/>
|
||||
<FILE id="WaT0B16" name="jucer_TreeViewTypes.h" compile="0" resource="0"
|
||||
file="Source/Project/jucer_TreeViewTypes.h"/>
|
||||
</GROUP>
|
||||
<GROUP id="{579C9644-D5C2-8469-9439-F91C81337531}" name="Project Saving">
|
||||
<FILE id="TtXohM" name="jucer_ProjectExport_Android.h" compile="0"
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
*/
|
||||
|
||||
#include "jucer_ResourceFile.h"
|
||||
#include "../Project/jucer_ProjectTreeViewBase.h"
|
||||
#include "../Application/jucer_OpenDocumentManager.h"
|
||||
|
||||
static const char* resourceFileIdentifierString = "JUCER_BINARY_RESOURCE";
|
||||
|
|
|
|||
|
|
@ -1,469 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../Project Saving/jucer_ProjectExporter.h"
|
||||
#include "../Application/jucer_Application.h"
|
||||
#include "jucer_ConfigPage.h"
|
||||
#include "jucer_ModulesPanel.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
void SettingsTreeViewItemBase::showSettingsPage (Component* content)
|
||||
{
|
||||
content->setComponentID (getUniqueName());
|
||||
|
||||
ScopedPointer<Component> comp (content);
|
||||
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
pcc->setEditorComponent (new PropertyPanelViewport (comp.release()), nullptr);
|
||||
}
|
||||
|
||||
void SettingsTreeViewItemBase::closeSettingsPage()
|
||||
{
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
{
|
||||
if (PropertyPanelViewport* ppv = dynamic_cast<PropertyPanelViewport*> (pcc->getEditorComponent()))
|
||||
if (ppv->viewport.getViewedComponent()->getComponentID() == getUniqueName())
|
||||
pcc->hideEditor();
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
namespace ProjectSettingsTreeClasses
|
||||
{
|
||||
class ConfigItem : public SettingsTreeViewItemBase
|
||||
{
|
||||
public:
|
||||
ConfigItem (const ProjectExporter::BuildConfiguration::Ptr& conf, const String& expName)
|
||||
: config (conf), exporterName (expName), configTree (config->config)
|
||||
{
|
||||
jassert (config != nullptr);
|
||||
configTree.addListener (this);
|
||||
}
|
||||
|
||||
bool isMissing() override { return false; }
|
||||
bool canBeSelected() const override { return true; }
|
||||
bool mightContainSubItems() override { return false; }
|
||||
String getUniqueName() const override { return "config_" + config->getName(); }
|
||||
String getRenamingName() const override { return getDisplayName(); }
|
||||
String getDisplayName() const override { return config->getName(); }
|
||||
void setName (const String&) override {}
|
||||
Icon getIcon() const override { return Icon (getIcons().config, getContrastingColour (Colours::green, 0.5f)); }
|
||||
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (config, exporterName)); }
|
||||
void itemOpennessChanged (bool) override {}
|
||||
|
||||
void deleteItem() override
|
||||
{
|
||||
if (AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, "Delete Configuration",
|
||||
"Are you sure you want to delete this configuration?"))
|
||||
{
|
||||
closeSettingsPage();
|
||||
config->removeFromExporter();
|
||||
}
|
||||
}
|
||||
|
||||
void showPopupMenu() override
|
||||
{
|
||||
PopupMenu menu;
|
||||
menu.addItem (1, "Create a copy of this configuration");
|
||||
menu.addSeparator();
|
||||
menu.addItem (2, "Delete this configuration");
|
||||
|
||||
launchPopupMenu (menu);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode) override
|
||||
{
|
||||
if (resultCode == 2)
|
||||
{
|
||||
deleteAllSelectedItems();
|
||||
}
|
||||
else if (resultCode == 1)
|
||||
{
|
||||
for (Project::ExporterIterator exporter (config->project); exporter.next();)
|
||||
{
|
||||
if (config->config.isAChildOf (exporter.exporter->settings))
|
||||
{
|
||||
exporter.exporter->addNewConfiguration (config);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var getDragSourceDescription()
|
||||
{
|
||||
return getParentItem()->getUniqueName() + "||" + config->getName();
|
||||
}
|
||||
|
||||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override { repaintItem(); }
|
||||
|
||||
private:
|
||||
ProjectExporter::BuildConfiguration::Ptr config;
|
||||
String exporterName;
|
||||
ValueTree configTree;
|
||||
|
||||
//==============================================================================
|
||||
class SettingsComp : public Component
|
||||
{
|
||||
public:
|
||||
SettingsComp (ProjectExporter::BuildConfiguration* conf, const String& expName)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
PropertyListBuilder props;
|
||||
conf->createPropertyEditors (props);
|
||||
group.setProperties (props);
|
||||
group.setName (expName + " / " + conf->getName());
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void parentSizeChanged() override { updateSize (*this, group); }
|
||||
|
||||
private:
|
||||
PropertyGroup group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ConfigItem)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class ExporterItem : public SettingsTreeViewItemBase
|
||||
{
|
||||
public:
|
||||
ExporterItem (Project& p, ProjectExporter* e, int index)
|
||||
: project (p), exporter (e), configListTree (exporter->getConfigurations()),
|
||||
exporterIndex (index)
|
||||
{
|
||||
configListTree.addListener (this);
|
||||
jassert (exporter != nullptr);
|
||||
}
|
||||
|
||||
bool canBeSelected() const override { return true; }
|
||||
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(); }
|
||||
void setName (const String&) override {}
|
||||
bool isMissing() override { return false; }
|
||||
Icon getIcon() const override { return Icon (getIcons().exporter, getContrastingColour (0.5f)); }
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (exporter)); }
|
||||
|
||||
void deleteItem()
|
||||
{
|
||||
if (AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, "Delete Exporter",
|
||||
"Are you sure you want to delete this export target?"))
|
||||
{
|
||||
closeSettingsPage();
|
||||
ValueTree parent (exporter->settings.getParent());
|
||||
parent.removeChild (exporter->settings, project.getUndoManagerFor (parent));
|
||||
}
|
||||
}
|
||||
|
||||
void addSubItems()
|
||||
{
|
||||
for (ProjectExporter::ConfigIterator config (*exporter); config.next();)
|
||||
addSubItem (new ConfigItem (config.config, exporter->getName()));
|
||||
}
|
||||
|
||||
void showPopupMenu()
|
||||
{
|
||||
PopupMenu menu;
|
||||
menu.addItem (1, "Add a new configuration");
|
||||
menu.addSeparator();
|
||||
menu.addItem (2, "Delete this exporter");
|
||||
|
||||
launchPopupMenu (menu);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode)
|
||||
{
|
||||
if (resultCode == 2)
|
||||
deleteAllSelectedItems();
|
||||
else if (resultCode == 1)
|
||||
exporter->addNewConfiguration (nullptr);
|
||||
}
|
||||
|
||||
var getDragSourceDescription()
|
||||
{
|
||||
return getParentItem()->getUniqueName() + "/" + String (exporterIndex);
|
||||
}
|
||||
|
||||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails)
|
||||
{
|
||||
return dragSourceDetails.description.toString().startsWith (getUniqueName());
|
||||
}
|
||||
|
||||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex)
|
||||
{
|
||||
const int oldIndex = indexOfConfig (dragSourceDetails.description.toString().fromLastOccurrenceOf ("||", false, false));
|
||||
|
||||
if (oldIndex >= 0)
|
||||
configListTree.moveChild (oldIndex, insertIndex, project.getUndoManagerFor (configListTree));
|
||||
}
|
||||
|
||||
int indexOfConfig (const String& configName)
|
||||
{
|
||||
int i = 0;
|
||||
for (ProjectExporter::ConfigIterator config (*exporter); config.next(); ++i)
|
||||
if (config->getName() == configName)
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); }
|
||||
|
||||
void refreshIfNeeded (ValueTree& changedTree)
|
||||
{
|
||||
if (changedTree == configListTree)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
ScopedPointer<ProjectExporter> exporter;
|
||||
ValueTree configListTree;
|
||||
int exporterIndex;
|
||||
|
||||
//==============================================================================
|
||||
class SettingsComp : public Component
|
||||
{
|
||||
public:
|
||||
SettingsComp (ProjectExporter* exp)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
PropertyListBuilder props;
|
||||
exp->createPropertyEditors (props);
|
||||
group.setProperties (props);
|
||||
group.setName ("Export target: " + exp->getName());
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void parentSizeChanged() override { updateSize (*this, group); }
|
||||
|
||||
private:
|
||||
PropertyGroup group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ExporterItem)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class ModulesItem : public SettingsTreeViewItemBase
|
||||
{
|
||||
public:
|
||||
ModulesItem (Project& p) : project (p) {}
|
||||
|
||||
bool isModulesList() const override { return true; }
|
||||
bool canBeSelected() const override { return true; }
|
||||
bool mightContainSubItems() override { return false; }
|
||||
String getUniqueName() const override { return "modules"; }
|
||||
String getRenamingName() const override { return getDisplayName(); }
|
||||
String getDisplayName() const override { return "Modules"; }
|
||||
void setName (const String&) override {}
|
||||
bool isMissing() override { return false; }
|
||||
Icon getIcon() const override { return Icon (getIcons().graph, getContrastingColour (Colours::red, 0.5f)); }
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (project)); }
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
|
||||
//==============================================================================
|
||||
class SettingsComp : public Component
|
||||
{
|
||||
public:
|
||||
SettingsComp (Project& p) : project (p)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
PropertyListBuilder props;
|
||||
props.add (new ModulesPanel (project));
|
||||
group.setProperties (props);
|
||||
group.setName ("Modules");
|
||||
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void parentSizeChanged() override
|
||||
{
|
||||
updateSize (*this, group);
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
var lastProjectType;
|
||||
PropertyGroup group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModulesItem)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class RootItem : public SettingsTreeViewItemBase
|
||||
{
|
||||
public:
|
||||
RootItem (Project& p)
|
||||
: project (p), exportersTree (p.getExporters())
|
||||
{
|
||||
exportersTree.addListener (this);
|
||||
}
|
||||
|
||||
bool isProjectSettings() const override { return true; }
|
||||
String getRenamingName() const override { return getDisplayName(); }
|
||||
String getDisplayName() const override { return project.getTitle(); }
|
||||
void setName (const String&) override {}
|
||||
bool isMissing() override { return false; }
|
||||
Icon getIcon() const override { return project.getMainGroup().getIcon().withContrastingColourTo (getBackgroundColour()); }
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (project)); }
|
||||
bool canBeSelected() const override { return true; }
|
||||
bool mightContainSubItems() override { return project.getNumExporters() > 0; }
|
||||
String getUniqueName() const override { return "config_root"; }
|
||||
|
||||
void addSubItems() override
|
||||
{
|
||||
addSubItem (new ModulesItem (project));
|
||||
IntrojucerApp::getApp().addExtraConfigItems (project, *this);
|
||||
|
||||
int i = 0;
|
||||
for (Project::ExporterIterator exporter (project); exporter.next(); ++i)
|
||||
addSubItem (new ExporterItem (project, exporter.exporter.release(), i));
|
||||
}
|
||||
|
||||
void showPopupMenu() override
|
||||
{
|
||||
PopupMenu menu;
|
||||
|
||||
const StringArray exporters (ProjectExporter::getExporterNames());
|
||||
|
||||
for (int i = 0; i < exporters.size(); ++i)
|
||||
menu.addItem (i + 1, "Create a new " + exporters[i] + " target");
|
||||
|
||||
launchPopupMenu (menu);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode) override
|
||||
{
|
||||
if (resultCode > 0)
|
||||
{
|
||||
String exporterName (ProjectExporter::getExporterNames() [resultCode - 1]);
|
||||
|
||||
if (exporterName.isNotEmpty())
|
||||
project.addNewExporter (exporterName);
|
||||
}
|
||||
}
|
||||
|
||||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override
|
||||
{
|
||||
return dragSourceDetails.description.toString().startsWith (getUniqueName());
|
||||
}
|
||||
|
||||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) override
|
||||
{
|
||||
int oldIndex = dragSourceDetails.description.toString().getTrailingIntValue();
|
||||
exportersTree.moveChild (oldIndex, jmax (0, insertIndex - 1), project.getUndoManagerFor (exportersTree));
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); }
|
||||
|
||||
void refreshIfNeeded (ValueTree& changedTree)
|
||||
{
|
||||
if (changedTree == exportersTree)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
ValueTree exportersTree;
|
||||
|
||||
//==============================================================================
|
||||
class SettingsComp : public Component,
|
||||
private ChangeListener
|
||||
{
|
||||
public:
|
||||
SettingsComp (Project& p) : project (p)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
updatePropertyList();
|
||||
project.addChangeListener (this);
|
||||
}
|
||||
|
||||
~SettingsComp()
|
||||
{
|
||||
project.removeChangeListener (this);
|
||||
}
|
||||
|
||||
void parentSizeChanged() override
|
||||
{
|
||||
updateSize (*this, group);
|
||||
}
|
||||
|
||||
void updatePropertyList()
|
||||
{
|
||||
PropertyListBuilder props;
|
||||
project.createPropertyEditors (props);
|
||||
group.setProperties (props);
|
||||
group.setName ("Project Settings");
|
||||
|
||||
lastProjectType = project.getProjectTypeValue().getValue();
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void changeListenerCallback (ChangeBroadcaster*) override
|
||||
{
|
||||
if (lastProjectType != project.getProjectTypeValue().getValue())
|
||||
updatePropertyList();
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
var lastProjectType;
|
||||
PropertyGroup group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RootItem)
|
||||
};
|
||||
}
|
||||
|
||||
JucerTreeViewBase* createProjectConfigTreeViewRoot (Project& project)
|
||||
{
|
||||
return new ProjectSettingsTreeClasses::RootItem (project);
|
||||
}
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef __JUCER_CONFIGPAGE_JUCEHEADER__
|
||||
#define __JUCER_CONFIGPAGE_JUCEHEADER__
|
||||
|
||||
#include "jucer_Project.h"
|
||||
#include "../Utility/jucer_JucerTreeViewBase.h"
|
||||
|
||||
//==============================================================================
|
||||
JucerTreeViewBase* createProjectConfigTreeViewRoot (Project& project);
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class PropertyGroup : public Component
|
||||
{
|
||||
public:
|
||||
PropertyGroup() {}
|
||||
|
||||
void setProperties (const PropertyListBuilder& newProps)
|
||||
{
|
||||
properties.clear();
|
||||
properties.addArray (newProps.components);
|
||||
|
||||
for (int i = properties.size(); --i >= 0;)
|
||||
addAndMakeVisible (properties.getUnchecked(i));
|
||||
}
|
||||
|
||||
int updateSize (int x, int y, int width)
|
||||
{
|
||||
int height = 38;
|
||||
|
||||
for (int i = 0; i < properties.size(); ++i)
|
||||
{
|
||||
PropertyComponent* pp = properties.getUnchecked(i);
|
||||
pp->setBounds (10, height, width - 20, pp->getPreferredHeight());
|
||||
height += pp->getHeight();
|
||||
}
|
||||
|
||||
height += 16;
|
||||
setBounds (x, y, width, height);
|
||||
return height;
|
||||
}
|
||||
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
const Colour bkg (findColour (mainBackgroundColourId));
|
||||
|
||||
g.setColour (Colours::white.withAlpha (0.35f));
|
||||
g.fillRect (0, 30, getWidth(), getHeight() - 38);
|
||||
|
||||
g.setFont (Font (15.0f, Font::bold));
|
||||
g.setColour (bkg.contrasting (0.7f));
|
||||
g.drawFittedText (getName(), 12, 0, getWidth() - 16, 25, Justification::bottomLeft, 1);
|
||||
}
|
||||
|
||||
OwnedArray<PropertyComponent> properties;
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyGroup)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class PropertyPanelViewport : public Component
|
||||
{
|
||||
public:
|
||||
PropertyPanelViewport (Component* content)
|
||||
{
|
||||
addAndMakeVisible (&viewport);
|
||||
addAndMakeVisible (&rolloverHelp);
|
||||
viewport.setViewedComponent (content, true);
|
||||
}
|
||||
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
IntrojucerLookAndFeel::fillWithBackgroundTexture (*this, g);
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
Rectangle<int> r (getLocalBounds());
|
||||
rolloverHelp.setBounds (r.removeFromBottom (70).reduced (10, 0));
|
||||
viewport.setBounds (r);
|
||||
}
|
||||
|
||||
Viewport viewport;
|
||||
RolloverHelpComp rolloverHelp;
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyPanelViewport)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class SettingsTreeViewItemBase : public JucerTreeViewBase,
|
||||
public ValueTree::Listener
|
||||
{
|
||||
public:
|
||||
SettingsTreeViewItemBase() {}
|
||||
|
||||
void showSettingsPage (Component* content);
|
||||
void closeSettingsPage();
|
||||
|
||||
void deleteAllSelectedItems() override
|
||||
{
|
||||
TreeView* const tree = getOwnerView();
|
||||
jassert (tree->getNumSelectedItems() <= 1); // multi-select should be disabled
|
||||
|
||||
if (SettingsTreeViewItemBase* s = dynamic_cast <SettingsTreeViewItemBase*> (tree->getSelectedItem (0)))
|
||||
s->deleteItem();
|
||||
}
|
||||
|
||||
void itemOpennessChanged (bool isNowOpen) override
|
||||
{
|
||||
if (isNowOpen)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override {}
|
||||
void valueTreeChildAdded (ValueTree&, ValueTree&) override {}
|
||||
void valueTreeChildRemoved (ValueTree&, ValueTree&) override {}
|
||||
void valueTreeChildOrderChanged (ValueTree&) override {}
|
||||
void valueTreeParentChanged (ValueTree&) override {}
|
||||
|
||||
virtual bool isProjectSettings() const { return false; }
|
||||
virtual bool isModulesList() const { return false; }
|
||||
|
||||
static void updateSize (Component& comp, PropertyGroup& group)
|
||||
{
|
||||
const int width = jmax (550, comp.getParentWidth() - 20);
|
||||
|
||||
int y = 0;
|
||||
y += group.updateSize (12, y, width - 12);
|
||||
|
||||
comp.setSize (width, y);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif // __JUCER_CONFIGPAGE_JUCEHEADER__
|
||||
296
extras/Introjucer/Source/Project/jucer_ConfigTree_Base.h
Normal file
296
extras/Introjucer/Source/Project/jucer_ConfigTree_Base.h
Normal file
|
|
@ -0,0 +1,296 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
class PropertyGroupComponent : public Component
|
||||
{
|
||||
public:
|
||||
PropertyGroupComponent() {}
|
||||
|
||||
void setProperties (const PropertyListBuilder& newProps)
|
||||
{
|
||||
properties.clear();
|
||||
properties.addArray (newProps.components);
|
||||
|
||||
for (int i = properties.size(); --i >= 0;)
|
||||
addAndMakeVisible (properties.getUnchecked(i));
|
||||
}
|
||||
|
||||
int updateSize (int x, int y, int width)
|
||||
{
|
||||
int height = 38;
|
||||
|
||||
for (int i = 0; i < properties.size(); ++i)
|
||||
{
|
||||
PropertyComponent* pp = properties.getUnchecked(i);
|
||||
pp->setBounds (10, height, width - 20, pp->getPreferredHeight());
|
||||
height += pp->getHeight();
|
||||
}
|
||||
|
||||
height += 16;
|
||||
setBounds (x, y, width, height);
|
||||
return height;
|
||||
}
|
||||
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
const Colour bkg (findColour (mainBackgroundColourId));
|
||||
|
||||
g.setColour (Colours::white.withAlpha (0.35f));
|
||||
g.fillRect (0, 30, getWidth(), getHeight() - 38);
|
||||
|
||||
g.setFont (Font (15.0f, Font::bold));
|
||||
g.setColour (bkg.contrasting (0.7f));
|
||||
g.drawFittedText (getName(), 12, 0, getWidth() - 16, 25, Justification::bottomLeft, 1);
|
||||
}
|
||||
|
||||
OwnedArray<PropertyComponent> properties;
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyGroupComponent)
|
||||
};
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class ConfigTreeItemBase : public JucerTreeViewBase,
|
||||
public ValueTree::Listener
|
||||
{
|
||||
public:
|
||||
ConfigTreeItemBase() {}
|
||||
|
||||
void showSettingsPage (Component* content)
|
||||
{
|
||||
content->setComponentID (getUniqueName());
|
||||
|
||||
ScopedPointer<Component> comp (content);
|
||||
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
pcc->setEditorComponent (new PropertyPanelViewport (comp.release()), nullptr);
|
||||
}
|
||||
|
||||
void closeSettingsPage()
|
||||
{
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
{
|
||||
if (PropertyPanelViewport* ppv = dynamic_cast<PropertyPanelViewport*> (pcc->getEditorComponent()))
|
||||
if (ppv->viewport.getViewedComponent()->getComponentID() == getUniqueName())
|
||||
pcc->hideEditor();
|
||||
}
|
||||
}
|
||||
|
||||
void deleteAllSelectedItems() override
|
||||
{
|
||||
TreeView* const tree = getOwnerView();
|
||||
jassert (tree->getNumSelectedItems() <= 1); // multi-select should be disabled
|
||||
|
||||
if (ConfigTreeItemBase* s = dynamic_cast<ConfigTreeItemBase*> (tree->getSelectedItem (0)))
|
||||
s->deleteItem();
|
||||
}
|
||||
|
||||
void itemOpennessChanged (bool isNowOpen) override
|
||||
{
|
||||
if (isNowOpen)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override {}
|
||||
void valueTreeChildAdded (ValueTree&, ValueTree&) override {}
|
||||
void valueTreeChildRemoved (ValueTree&, ValueTree&) override {}
|
||||
void valueTreeChildOrderChanged (ValueTree&) override {}
|
||||
void valueTreeParentChanged (ValueTree&) override {}
|
||||
|
||||
virtual bool isProjectSettings() const { return false; }
|
||||
virtual bool isModulesList() const { return false; }
|
||||
|
||||
static void updateSize (Component& comp, PropertyGroupComponent& group)
|
||||
{
|
||||
const int width = jmax (550, comp.getParentWidth() - 20);
|
||||
|
||||
int y = 0;
|
||||
y += group.updateSize (12, y, width - 12);
|
||||
|
||||
comp.setSize (width, y);
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
class PropertyPanelViewport : public Component
|
||||
{
|
||||
public:
|
||||
PropertyPanelViewport (Component* content)
|
||||
{
|
||||
addAndMakeVisible (&viewport);
|
||||
addAndMakeVisible (&rolloverHelp);
|
||||
viewport.setViewedComponent (content, true);
|
||||
}
|
||||
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
IntrojucerLookAndFeel::fillWithBackgroundTexture (*this, g);
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
Rectangle<int> r (getLocalBounds());
|
||||
rolloverHelp.setBounds (r.removeFromBottom (70).reduced (10, 0));
|
||||
viewport.setBounds (r);
|
||||
}
|
||||
|
||||
Viewport viewport;
|
||||
RolloverHelpComp rolloverHelp;
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyPanelViewport)
|
||||
};
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class RootItem : public ConfigTreeItemBase
|
||||
{
|
||||
public:
|
||||
RootItem (Project& p)
|
||||
: project (p), exportersTree (p.getExporters())
|
||||
{
|
||||
exportersTree.addListener (this);
|
||||
}
|
||||
|
||||
bool isProjectSettings() const override { return true; }
|
||||
String getRenamingName() const override { return getDisplayName(); }
|
||||
String getDisplayName() const override { return project.getTitle(); }
|
||||
void setName (const String&) override {}
|
||||
bool isMissing() override { return false; }
|
||||
Icon getIcon() const override { return project.getMainGroup().getIcon().withContrastingColourTo (getBackgroundColour()); }
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (project)); }
|
||||
bool canBeSelected() const override { return true; }
|
||||
bool mightContainSubItems() override { return project.getNumExporters() > 0; }
|
||||
String getUniqueName() const override { return "config_root"; }
|
||||
|
||||
void addSubItems() override
|
||||
{
|
||||
addSubItem (new ModulesItem (project));
|
||||
IntrojucerApp::getApp().addExtraConfigItems (project, *this);
|
||||
|
||||
int i = 0;
|
||||
for (Project::ExporterIterator exporter (project); exporter.next(); ++i)
|
||||
addSubItem (new ExporterItem (project, exporter.exporter.release(), i));
|
||||
}
|
||||
|
||||
void showPopupMenu() override
|
||||
{
|
||||
PopupMenu menu;
|
||||
|
||||
const StringArray exporters (ProjectExporter::getExporterNames());
|
||||
|
||||
for (int i = 0; i < exporters.size(); ++i)
|
||||
menu.addItem (i + 1, "Create a new " + exporters[i] + " target");
|
||||
|
||||
launchPopupMenu (menu);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode) override
|
||||
{
|
||||
if (resultCode > 0)
|
||||
{
|
||||
String exporterName (ProjectExporter::getExporterNames() [resultCode - 1]);
|
||||
|
||||
if (exporterName.isNotEmpty())
|
||||
project.addNewExporter (exporterName);
|
||||
}
|
||||
}
|
||||
|
||||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override
|
||||
{
|
||||
return dragSourceDetails.description.toString().startsWith (getUniqueName());
|
||||
}
|
||||
|
||||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) override
|
||||
{
|
||||
int oldIndex = dragSourceDetails.description.toString().getTrailingIntValue();
|
||||
exportersTree.moveChild (oldIndex, jmax (0, insertIndex - 1), project.getUndoManagerFor (exportersTree));
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); }
|
||||
|
||||
void refreshIfNeeded (ValueTree& changedTree)
|
||||
{
|
||||
if (changedTree == exportersTree)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
ValueTree exportersTree;
|
||||
|
||||
//==============================================================================
|
||||
class SettingsComp : public Component,
|
||||
private ChangeListener
|
||||
{
|
||||
public:
|
||||
SettingsComp (Project& p) : project (p)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
updatePropertyList();
|
||||
project.addChangeListener (this);
|
||||
}
|
||||
|
||||
~SettingsComp()
|
||||
{
|
||||
project.removeChangeListener (this);
|
||||
}
|
||||
|
||||
void parentSizeChanged() override
|
||||
{
|
||||
updateSize (*this, group);
|
||||
}
|
||||
|
||||
void updatePropertyList()
|
||||
{
|
||||
PropertyListBuilder props;
|
||||
project.createPropertyEditors (props);
|
||||
group.setProperties (props);
|
||||
group.setName ("Project Settings");
|
||||
|
||||
lastProjectType = project.getProjectTypeValue().getValue();
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void changeListenerCallback (ChangeBroadcaster*) override
|
||||
{
|
||||
if (lastProjectType != project.getProjectTypeValue().getValue())
|
||||
updatePropertyList();
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
var lastProjectType;
|
||||
PropertyGroupComponent group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RootItem)
|
||||
};
|
||||
251
extras/Introjucer/Source/Project/jucer_ConfigTree_Exporter.h
Normal file
251
extras/Introjucer/Source/Project/jucer_ConfigTree_Exporter.h
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
class ExporterItem : public ConfigTreeItemBase
|
||||
{
|
||||
public:
|
||||
ExporterItem (Project& p, ProjectExporter* e, int index)
|
||||
: project (p), exporter (e), configListTree (exporter->getConfigurations()),
|
||||
exporterIndex (index)
|
||||
{
|
||||
configListTree.addListener (this);
|
||||
jassert (exporter != nullptr);
|
||||
}
|
||||
|
||||
bool canBeSelected() const override { return true; }
|
||||
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(); }
|
||||
void setName (const String&) override {}
|
||||
bool isMissing() override { return false; }
|
||||
Icon getIcon() const override { return Icon (getIcons().exporter, getContrastingColour (0.5f)); }
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (exporter)); }
|
||||
|
||||
void deleteItem()
|
||||
{
|
||||
if (AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, "Delete Exporter",
|
||||
"Are you sure you want to delete this export target?"))
|
||||
{
|
||||
closeSettingsPage();
|
||||
ValueTree parent (exporter->settings.getParent());
|
||||
parent.removeChild (exporter->settings, project.getUndoManagerFor (parent));
|
||||
}
|
||||
}
|
||||
|
||||
void addSubItems()
|
||||
{
|
||||
for (ProjectExporter::ConfigIterator config (*exporter); config.next();)
|
||||
addSubItem (new ConfigItem (config.config, exporter->getName()));
|
||||
}
|
||||
|
||||
void showPopupMenu()
|
||||
{
|
||||
PopupMenu menu;
|
||||
menu.addItem (1, "Add a new configuration");
|
||||
menu.addSeparator();
|
||||
menu.addItem (2, "Delete this exporter");
|
||||
|
||||
launchPopupMenu (menu);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode)
|
||||
{
|
||||
if (resultCode == 2)
|
||||
deleteAllSelectedItems();
|
||||
else if (resultCode == 1)
|
||||
exporter->addNewConfiguration (nullptr);
|
||||
}
|
||||
|
||||
var getDragSourceDescription()
|
||||
{
|
||||
return getParentItem()->getUniqueName() + "/" + String (exporterIndex);
|
||||
}
|
||||
|
||||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails)
|
||||
{
|
||||
return dragSourceDetails.description.toString().startsWith (getUniqueName());
|
||||
}
|
||||
|
||||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex)
|
||||
{
|
||||
const int oldIndex = indexOfConfig (dragSourceDetails.description.toString().fromLastOccurrenceOf ("||", false, false));
|
||||
|
||||
if (oldIndex >= 0)
|
||||
configListTree.moveChild (oldIndex, insertIndex, project.getUndoManagerFor (configListTree));
|
||||
}
|
||||
|
||||
int indexOfConfig (const String& configName)
|
||||
{
|
||||
int i = 0;
|
||||
for (ProjectExporter::ConfigIterator config (*exporter); config.next(); ++i)
|
||||
if (config->getName() == configName)
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); }
|
||||
void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); }
|
||||
|
||||
void refreshIfNeeded (ValueTree& changedTree)
|
||||
{
|
||||
if (changedTree == configListTree)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
ScopedPointer<ProjectExporter> exporter;
|
||||
ValueTree configListTree;
|
||||
int exporterIndex;
|
||||
|
||||
//==============================================================================
|
||||
class SettingsComp : public Component
|
||||
{
|
||||
public:
|
||||
SettingsComp (ProjectExporter* exp)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
PropertyListBuilder props;
|
||||
exp->createPropertyEditors (props);
|
||||
group.setProperties (props);
|
||||
group.setName ("Export target: " + exp->getName());
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void parentSizeChanged() override { updateSize (*this, group); }
|
||||
|
||||
private:
|
||||
PropertyGroupComponent group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ExporterItem)
|
||||
};
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class ConfigItem : public ConfigTreeItemBase
|
||||
{
|
||||
public:
|
||||
ConfigItem (const ProjectExporter::BuildConfiguration::Ptr& conf, const String& expName)
|
||||
: config (conf), exporterName (expName), configTree (config->config)
|
||||
{
|
||||
jassert (config != nullptr);
|
||||
configTree.addListener (this);
|
||||
}
|
||||
|
||||
bool isMissing() override { return false; }
|
||||
bool canBeSelected() const override { return true; }
|
||||
bool mightContainSubItems() override { return false; }
|
||||
String getUniqueName() const override { return "config_" + config->getName(); }
|
||||
String getRenamingName() const override { return getDisplayName(); }
|
||||
String getDisplayName() const override { return config->getName(); }
|
||||
void setName (const String&) override {}
|
||||
Icon getIcon() const override { return Icon (getIcons().config, getContrastingColour (Colours::green, 0.5f)); }
|
||||
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (config, exporterName)); }
|
||||
void itemOpennessChanged (bool) override {}
|
||||
|
||||
void deleteItem() override
|
||||
{
|
||||
if (AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, "Delete Configuration",
|
||||
"Are you sure you want to delete this configuration?"))
|
||||
{
|
||||
closeSettingsPage();
|
||||
config->removeFromExporter();
|
||||
}
|
||||
}
|
||||
|
||||
void showPopupMenu() override
|
||||
{
|
||||
PopupMenu menu;
|
||||
menu.addItem (1, "Create a copy of this configuration");
|
||||
menu.addSeparator();
|
||||
menu.addItem (2, "Delete this configuration");
|
||||
|
||||
launchPopupMenu (menu);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode) override
|
||||
{
|
||||
if (resultCode == 2)
|
||||
{
|
||||
deleteAllSelectedItems();
|
||||
}
|
||||
else if (resultCode == 1)
|
||||
{
|
||||
for (Project::ExporterIterator exporter (config->project); exporter.next();)
|
||||
{
|
||||
if (config->config.isAChildOf (exporter.exporter->settings))
|
||||
{
|
||||
exporter.exporter->addNewConfiguration (config);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var getDragSourceDescription()
|
||||
{
|
||||
return getParentItem()->getUniqueName() + "||" + config->getName();
|
||||
}
|
||||
|
||||
void valueTreePropertyChanged (ValueTree&, const Identifier&) override { repaintItem(); }
|
||||
|
||||
private:
|
||||
ProjectExporter::BuildConfiguration::Ptr config;
|
||||
String exporterName;
|
||||
ValueTree configTree;
|
||||
|
||||
//==============================================================================
|
||||
class SettingsComp : public Component
|
||||
{
|
||||
public:
|
||||
SettingsComp (ProjectExporter::BuildConfiguration* conf, const String& expName)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
PropertyListBuilder props;
|
||||
conf->createPropertyEditors (props);
|
||||
group.setProperties (props);
|
||||
group.setName (expName + " / " + conf->getName());
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void parentSizeChanged() override { updateSize (*this, group); }
|
||||
|
||||
private:
|
||||
PropertyGroupComponent group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ConfigItem)
|
||||
};
|
||||
73
extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h
Normal file
73
extras/Introjucer/Source/Project/jucer_ConfigTree_Modules.h
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
class ModulesItem : public ConfigTreeItemBase
|
||||
{
|
||||
public:
|
||||
ModulesItem (Project& p) : project (p) {}
|
||||
|
||||
bool isModulesList() const override { return true; }
|
||||
bool canBeSelected() const override { return true; }
|
||||
bool mightContainSubItems() override { return false; }
|
||||
String getUniqueName() const override { return "modules"; }
|
||||
String getRenamingName() const override { return getDisplayName(); }
|
||||
String getDisplayName() const override { return "Modules"; }
|
||||
void setName (const String&) override {}
|
||||
bool isMissing() override { return false; }
|
||||
Icon getIcon() const override { return Icon (getIcons().graph, getContrastingColour (Colours::red, 0.5f)); }
|
||||
void showDocument() override { showSettingsPage (new SettingsComp (project)); }
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
|
||||
class SettingsComp : public Component
|
||||
{
|
||||
public:
|
||||
SettingsComp (Project& p) : project (p)
|
||||
{
|
||||
addAndMakeVisible (&group);
|
||||
|
||||
PropertyListBuilder props;
|
||||
props.add (new ModulesPanel (project));
|
||||
group.setProperties (props);
|
||||
group.setName ("Modules");
|
||||
|
||||
parentSizeChanged();
|
||||
}
|
||||
|
||||
void parentSizeChanged() override
|
||||
{
|
||||
updateSize (*this, group);
|
||||
}
|
||||
|
||||
private:
|
||||
Project& project;
|
||||
var lastProjectType;
|
||||
PropertyGroupComponent group;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComp)
|
||||
};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModulesItem)
|
||||
};
|
||||
|
|
@ -26,32 +26,45 @@
|
|||
#include "../Application/jucer_MainWindow.h"
|
||||
#include "../Application/jucer_Application.h"
|
||||
#include "../Code Editor/jucer_SourceCodeEditor.h"
|
||||
#include "jucer_ConfigPage.h"
|
||||
#include "jucer_TreeViewTypes.h"
|
||||
#include "../Project Saving/jucer_ProjectExporter.h"
|
||||
#include "../Utility/jucer_TranslationTool.h"
|
||||
#include "../Utility/jucer_JucerTreeViewBase.h"
|
||||
#include "jucer_NewFileWizard.h"
|
||||
#include "jucer_GroupInformationComponent.h"
|
||||
#include "jucer_ModulesPanel.h"
|
||||
|
||||
//==============================================================================
|
||||
class FileTreeTab : public TreePanelBase
|
||||
class FileTreePanel : public TreePanelBase
|
||||
{
|
||||
public:
|
||||
FileTreeTab (Project& p)
|
||||
FileTreePanel (Project& p)
|
||||
: TreePanelBase (&p, "fileTreeState")
|
||||
{
|
||||
tree.setMultiSelectEnabled (true);
|
||||
setRoot (new GroupTreeViewItem (p.getMainGroup()));
|
||||
setRoot (new GroupItem (p.getMainGroup()));
|
||||
}
|
||||
|
||||
void updateMissingFileStatuses()
|
||||
{
|
||||
if (ProjectTreeItemBase* p = dynamic_cast<ProjectTreeItemBase*> (rootItem.get()))
|
||||
p->checkFileStatus();
|
||||
}
|
||||
|
||||
private:
|
||||
#include "jucer_ProjectTree_Base.h"
|
||||
#include "jucer_ProjectTree_Group.h"
|
||||
#include "jucer_ProjectTree_File.h"
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class ConfigTreeTab : public TreePanelBase
|
||||
class ConfigTreePanel : public TreePanelBase
|
||||
{
|
||||
public:
|
||||
ConfigTreeTab (Project& p)
|
||||
ConfigTreePanel (Project& p)
|
||||
: TreePanelBase (&p, "settingsTreeState")
|
||||
{
|
||||
tree.setMultiSelectEnabled (false);
|
||||
setRoot (createProjectConfigTreeViewRoot (p));
|
||||
setRoot (new RootItem (p));
|
||||
|
||||
if (tree.getNumSelectedItems() == 0)
|
||||
tree.getRootItem()->setSelected (true, true);
|
||||
|
|
@ -85,7 +98,28 @@ public:
|
|||
tree.setBounds (r);
|
||||
}
|
||||
|
||||
void showProjectSettings()
|
||||
{
|
||||
if (ConfigTreeItemBase* root = dynamic_cast<ConfigTreeItemBase*> (rootItem.get()))
|
||||
if (root->isProjectSettings())
|
||||
root->setSelected (true, true);
|
||||
}
|
||||
|
||||
void showModules()
|
||||
{
|
||||
if (ConfigTreeItemBase* root = dynamic_cast<ConfigTreeItemBase*> (rootItem.get()))
|
||||
if (root->isProjectSettings())
|
||||
if (ConfigTreeItemBase* mods = dynamic_cast<ConfigTreeItemBase*> (root->getSubItem (0)))
|
||||
if (mods->isModulesList())
|
||||
mods->setSelected (true, true);
|
||||
}
|
||||
|
||||
TextButton openProjectButton, saveAndOpenButton;
|
||||
|
||||
private:
|
||||
#include "jucer_ConfigTree_Base.h"
|
||||
#include "jucer_ConfigTree_Modules.h"
|
||||
#include "jucer_ConfigTree_Exporter.h"
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -249,8 +283,8 @@ void ProjectContentComponent::createProjectTabs()
|
|||
jassert (project != nullptr);
|
||||
const Colour tabColour (Colours::transparentBlack);
|
||||
|
||||
treeViewTabs.addTab ("Files", tabColour, new FileTreeTab (*project), true);
|
||||
treeViewTabs.addTab ("Config", tabColour, new ConfigTreeTab (*project), true);
|
||||
treeViewTabs.addTab ("Files", tabColour, new FileTreePanel (*project), true);
|
||||
treeViewTabs.addTab ("Config", tabColour, new ConfigTreePanel (*project), true);
|
||||
}
|
||||
|
||||
void ProjectContentComponent::deleteProjectTabs()
|
||||
|
|
@ -269,22 +303,6 @@ void ProjectContentComponent::deleteProjectTabs()
|
|||
treeViewTabs.clearTabs();
|
||||
}
|
||||
|
||||
TreeView* ProjectContentComponent::getFilesTreeView() const
|
||||
{
|
||||
if (FileTreeTab* ft = dynamic_cast<FileTreeTab*> (treeViewTabs.getTabContentComponent (0)))
|
||||
return &(ft->tree);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ProjectTreeViewBase* ProjectContentComponent::getFilesTreeRoot() const
|
||||
{
|
||||
if (TreeView* tv = getFilesTreeView())
|
||||
return dynamic_cast <ProjectTreeViewBase*> (tv->getRootItem());
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ProjectContentComponent::saveTreeViewState()
|
||||
{
|
||||
for (int i = treeViewTabs.getNumTabs(); --i >= 0;)
|
||||
|
|
@ -329,8 +347,8 @@ void ProjectContentComponent::changeListenerCallback (ChangeBroadcaster*)
|
|||
|
||||
void ProjectContentComponent::updateMissingFileStatuses()
|
||||
{
|
||||
if (ProjectTreeViewBase* p = getFilesTreeRoot())
|
||||
p->checkFileStatus();
|
||||
if (FileTreePanel* tree = dynamic_cast<FileTreePanel*> (treeViewTabs.getTabContentComponent (0)))
|
||||
tree->updateMissingFileStatuses();
|
||||
}
|
||||
|
||||
bool ProjectContentComponent::showEditorForFile (const File& f, bool grabFocus)
|
||||
|
|
@ -507,22 +525,16 @@ void ProjectContentComponent::showProjectSettings()
|
|||
{
|
||||
showConfigTab();
|
||||
|
||||
if (TreePanelBase* const tree = dynamic_cast<TreePanelBase*> (treeViewTabs.getCurrentContentComponent()))
|
||||
if (SettingsTreeViewItemBase* root = dynamic_cast<SettingsTreeViewItemBase*> (tree->rootItem.get()))
|
||||
if (root->isProjectSettings())
|
||||
root->setSelected (true, true);
|
||||
if (ConfigTreePanel* const tree = dynamic_cast<ConfigTreePanel*> (treeViewTabs.getCurrentContentComponent()))
|
||||
tree->showProjectSettings();
|
||||
}
|
||||
|
||||
void ProjectContentComponent::showModules()
|
||||
{
|
||||
showConfigTab();
|
||||
|
||||
if (TreePanelBase* const tree = dynamic_cast<TreePanelBase*> (treeViewTabs.getCurrentContentComponent()))
|
||||
if (SettingsTreeViewItemBase* root = dynamic_cast<SettingsTreeViewItemBase*> (tree->rootItem.get()))
|
||||
if (root->isProjectSettings())
|
||||
if (SettingsTreeViewItemBase* mods = dynamic_cast<SettingsTreeViewItemBase*> (root->getSubItem (0)))
|
||||
if (mods->isModulesList())
|
||||
mods->setSelected (true, true);
|
||||
if (ConfigTreePanel* const tree = dynamic_cast<ConfigTreePanel*> (treeViewTabs.getCurrentContentComponent()))
|
||||
tree->showModules();
|
||||
}
|
||||
|
||||
StringArray ProjectContentComponent::getExportersWhichCanLaunch() const
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include "jucer_Project.h"
|
||||
#include "../Application/jucer_OpenDocumentManager.h"
|
||||
class ProjectTreeViewBase;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/**
|
||||
|
|
@ -119,8 +119,6 @@ protected:
|
|||
|
||||
void documentAboutToClose (OpenDocumentManager::Document*) override;
|
||||
void changeListenerCallback (ChangeBroadcaster*) override;
|
||||
TreeView* getFilesTreeView() const;
|
||||
ProjectTreeViewBase* getFilesTreeRoot() const;
|
||||
void showTranslationTool();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProjectContentComponent)
|
||||
|
|
|
|||
|
|
@ -1,439 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "jucer_ProjectTreeViewBase.h"
|
||||
#include "../Application/jucer_Application.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
ProjectTreeViewBase::ProjectTreeViewBase (const Project::Item& item_)
|
||||
: item (item_), isFileMissing (false)
|
||||
{
|
||||
item.state.addListener (this);
|
||||
}
|
||||
|
||||
ProjectTreeViewBase::~ProjectTreeViewBase()
|
||||
{
|
||||
item.state.removeListener (this);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
String ProjectTreeViewBase::getDisplayName() const
|
||||
{
|
||||
return item.getName();
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::setName (const String& newName)
|
||||
{
|
||||
if (item.isMainGroup())
|
||||
item.project.setTitle (newName);
|
||||
else
|
||||
item.getNameValue() = newName;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
File ProjectTreeViewBase::getFile() const
|
||||
{
|
||||
return item.getFile();
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::browseToAddExistingFiles()
|
||||
{
|
||||
const File location (item.isGroup() ? item.determineGroupFolder() : getFile());
|
||||
FileChooser fc ("Add Files to Jucer Project", location, String::empty, false);
|
||||
|
||||
if (fc.browseForMultipleFilesOrDirectories())
|
||||
{
|
||||
StringArray files;
|
||||
|
||||
for (int i = 0; i < fc.getResults().size(); ++i)
|
||||
files.add (fc.getResults().getReference(i).getFullPathName());
|
||||
|
||||
addFiles (files, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::addFiles (const StringArray& files, int insertIndex)
|
||||
{
|
||||
if (ProjectTreeViewBase* p = dynamic_cast <ProjectTreeViewBase*> (getParentItem()))
|
||||
p->addFiles (files, insertIndex);
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::moveSelectedItemsTo (OwnedArray <Project::Item>&, int /*insertIndex*/)
|
||||
{
|
||||
jassertfalse;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
ProjectTreeViewBase* ProjectTreeViewBase::findTreeViewItem (const Project::Item& itemToFind)
|
||||
{
|
||||
if (item == itemToFind)
|
||||
return this;
|
||||
|
||||
const bool wasOpen = isOpen();
|
||||
setOpen (true);
|
||||
|
||||
for (int i = getNumSubItems(); --i >= 0;)
|
||||
{
|
||||
if (ProjectTreeViewBase* pg = dynamic_cast <ProjectTreeViewBase*> (getSubItem(i)))
|
||||
if (ProjectTreeViewBase* found = pg->findTreeViewItem (itemToFind))
|
||||
return found;
|
||||
}
|
||||
|
||||
setOpen (wasOpen);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void ProjectTreeViewBase::triggerAsyncRename (const Project::Item& itemToRename)
|
||||
{
|
||||
class RenameMessage : public CallbackMessage
|
||||
{
|
||||
public:
|
||||
RenameMessage (TreeView* const t, const Project::Item& i)
|
||||
: tree (t), itemToRename (i) {}
|
||||
|
||||
void messageCallback() override
|
||||
{
|
||||
if (tree != nullptr)
|
||||
if (ProjectTreeViewBase* root = dynamic_cast <ProjectTreeViewBase*> (tree->getRootItem()))
|
||||
if (ProjectTreeViewBase* found = root->findTreeViewItem (itemToRename))
|
||||
found->showRenameBox();
|
||||
}
|
||||
|
||||
private:
|
||||
Component::SafePointer<TreeView> tree;
|
||||
Project::Item itemToRename;
|
||||
};
|
||||
|
||||
(new RenameMessage (getOwnerView(), itemToRename))->post();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void ProjectTreeViewBase::checkFileStatus()
|
||||
{
|
||||
const File file (getFile());
|
||||
const bool nowMissing = file != File::nonexistent && ! file.exists();
|
||||
|
||||
if (nowMissing != isFileMissing)
|
||||
{
|
||||
isFileMissing = nowMissing;
|
||||
repaintItem();
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::revealInFinder() const
|
||||
{
|
||||
getFile().revealToUser();
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::deleteItem()
|
||||
{
|
||||
item.removeItemFromProject();
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::deleteAllSelectedItems()
|
||||
{
|
||||
TreeView* tree = getOwnerView();
|
||||
const int numSelected = tree->getNumSelectedItems();
|
||||
OwnedArray <File> filesToTrash;
|
||||
OwnedArray <Project::Item> itemsToRemove;
|
||||
|
||||
for (int i = 0; i < numSelected; ++i)
|
||||
{
|
||||
if (const ProjectTreeViewBase* const p = dynamic_cast <ProjectTreeViewBase*> (tree->getSelectedItem (i)))
|
||||
{
|
||||
itemsToRemove.add (new Project::Item (p->item));
|
||||
|
||||
if (p->getFile().existsAsFile())
|
||||
filesToTrash.add (new File (p->getFile()));
|
||||
}
|
||||
}
|
||||
|
||||
if (filesToTrash.size() > 0)
|
||||
{
|
||||
String fileList;
|
||||
const int maxFilesToList = 10;
|
||||
for (int i = jmin (maxFilesToList, filesToTrash.size()); --i >= 0;)
|
||||
fileList << filesToTrash.getUnchecked(i)->getFullPathName() << "\n";
|
||||
|
||||
if (filesToTrash.size() > maxFilesToList)
|
||||
fileList << "\n...plus " << (filesToTrash.size() - maxFilesToList) << " more files...";
|
||||
|
||||
int r = AlertWindow::showYesNoCancelBox (AlertWindow::NoIcon, "Delete Project Items",
|
||||
"As well as removing the selected item(s) from the project, do you also want to move their files to the trash:\n\n"
|
||||
+ fileList,
|
||||
"Just remove references",
|
||||
"Also move files to Trash",
|
||||
"Cancel",
|
||||
tree->getTopLevelComponent());
|
||||
|
||||
if (r == 0)
|
||||
return;
|
||||
|
||||
if (r != 2)
|
||||
filesToTrash.clear();
|
||||
}
|
||||
|
||||
if (ProjectTreeViewBase* treeRootItem = dynamic_cast <ProjectTreeViewBase*> (tree->getRootItem()))
|
||||
{
|
||||
OpenDocumentManager& om = IntrojucerApp::getApp().openDocumentManager;
|
||||
|
||||
for (int i = filesToTrash.size(); --i >= 0;)
|
||||
{
|
||||
const File f (*filesToTrash.getUnchecked(i));
|
||||
|
||||
om.closeFile (f, false);
|
||||
|
||||
if (! f.moveToTrash())
|
||||
{
|
||||
// xxx
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = itemsToRemove.size(); --i >= 0;)
|
||||
{
|
||||
if (ProjectTreeViewBase* itemToRemove = treeRootItem->findTreeViewItem (*itemsToRemove.getUnchecked(i)))
|
||||
{
|
||||
om.closeFile (itemToRemove->getFile(), false);
|
||||
itemToRemove->deleteItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jassertfalse;
|
||||
}
|
||||
}
|
||||
|
||||
static int indexOfNode (const ValueTree& parent, const ValueTree& child)
|
||||
{
|
||||
for (int i = parent.getNumChildren(); --i >= 0;)
|
||||
if (parent.getChild (i) == child)
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::moveItems (OwnedArray <Project::Item>& selectedNodes,
|
||||
Project::Item destNode, int insertIndex)
|
||||
{
|
||||
for (int i = selectedNodes.size(); --i >= 0;)
|
||||
{
|
||||
Project::Item* const n = selectedNodes.getUnchecked(i);
|
||||
|
||||
if (destNode == *n || destNode.state.isAChildOf (n->state)) // Check for recursion.
|
||||
return;
|
||||
|
||||
if (! destNode.canContain (*n))
|
||||
selectedNodes.remove (i);
|
||||
}
|
||||
|
||||
// Don't include any nodes that are children of other selected nodes..
|
||||
for (int i = selectedNodes.size(); --i >= 0;)
|
||||
{
|
||||
Project::Item* const n = selectedNodes.getUnchecked(i);
|
||||
|
||||
for (int j = selectedNodes.size(); --j >= 0;)
|
||||
{
|
||||
if (j != i && n->state.isAChildOf (selectedNodes.getUnchecked(j)->state))
|
||||
{
|
||||
selectedNodes.remove (i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove and re-insert them one at a time..
|
||||
for (int i = 0; i < selectedNodes.size(); ++i)
|
||||
{
|
||||
Project::Item* selectedNode = selectedNodes.getUnchecked(i);
|
||||
|
||||
if (selectedNode->state.getParent() == destNode.state
|
||||
&& indexOfNode (destNode.state, selectedNode->state) < insertIndex)
|
||||
--insertIndex;
|
||||
|
||||
selectedNode->removeItemFromProject();
|
||||
destNode.addChild (*selectedNode, insertIndex++);
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool ProjectTreeViewBase::isInterestedInFileDrag (const StringArray& files)
|
||||
{
|
||||
return acceptsFileDrop (files);
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::filesDropped (const StringArray& files, int insertIndex)
|
||||
{
|
||||
addFiles (files, insertIndex);
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::getAllSelectedNodesInTree (Component* componentInTree, OwnedArray <Project::Item>& selectedNodes)
|
||||
{
|
||||
TreeView* tree = dynamic_cast <TreeView*> (componentInTree);
|
||||
|
||||
if (tree == nullptr)
|
||||
tree = componentInTree->findParentComponentOfClass<TreeView>();
|
||||
|
||||
if (tree != nullptr)
|
||||
{
|
||||
const int numSelected = tree->getNumSelectedItems();
|
||||
|
||||
for (int i = 0; i < numSelected; ++i)
|
||||
if (const ProjectTreeViewBase* const p = dynamic_cast <ProjectTreeViewBase*> (tree->getSelectedItem (i)))
|
||||
selectedNodes.add (new Project::Item (p->item));
|
||||
}
|
||||
}
|
||||
|
||||
bool ProjectTreeViewBase::isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails)
|
||||
{
|
||||
if (dragSourceDetails.description != projectItemDragType)
|
||||
return false;
|
||||
|
||||
OwnedArray <Project::Item> selectedNodes;
|
||||
getAllSelectedNodesInTree (dragSourceDetails.sourceComponent, selectedNodes);
|
||||
|
||||
return selectedNodes.size() > 0 && acceptsDragItems (selectedNodes);
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex)
|
||||
{
|
||||
OwnedArray <Project::Item> selectedNodes;
|
||||
getAllSelectedNodesInTree (dragSourceDetails.sourceComponent, selectedNodes);
|
||||
|
||||
if (selectedNodes.size() > 0)
|
||||
{
|
||||
TreeView* tree = getOwnerView();
|
||||
ScopedPointer <XmlElement> oldOpenness (tree->getOpennessState (false));
|
||||
|
||||
moveSelectedItemsTo (selectedNodes, insertIndex);
|
||||
|
||||
if (oldOpenness != nullptr)
|
||||
tree->restoreOpennessState (*oldOpenness, false);
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void ProjectTreeViewBase::treeChildrenChanged (const ValueTree& parentTree)
|
||||
{
|
||||
if (parentTree == item.state)
|
||||
{
|
||||
refreshSubItems();
|
||||
treeHasChanged();
|
||||
setOpen (true);
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::valueTreePropertyChanged (ValueTree& tree, const Identifier&)
|
||||
{
|
||||
if (tree == item.state)
|
||||
repaintItem();
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::valueTreeChildAdded (ValueTree& parentTree, ValueTree&)
|
||||
{
|
||||
treeChildrenChanged (parentTree);
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::valueTreeChildRemoved (ValueTree& parentTree, ValueTree&)
|
||||
{
|
||||
treeChildrenChanged (parentTree);
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::valueTreeChildOrderChanged (ValueTree& parentTree)
|
||||
{
|
||||
treeChildrenChanged (parentTree);
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::valueTreeParentChanged (ValueTree&)
|
||||
{
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool ProjectTreeViewBase::mightContainSubItems()
|
||||
{
|
||||
return item.getNumChildren() > 0;
|
||||
}
|
||||
|
||||
String ProjectTreeViewBase::getUniqueName() const
|
||||
{
|
||||
jassert (item.getID().isNotEmpty());
|
||||
return item.getID();
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::itemOpennessChanged (bool isNowOpen)
|
||||
{
|
||||
if (isNowOpen)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::addSubItems()
|
||||
{
|
||||
for (int i = 0; i < item.getNumChildren(); ++i)
|
||||
if (ProjectTreeViewBase* p = createSubItem (item.getChild(i)))
|
||||
addSubItem (p);
|
||||
}
|
||||
|
||||
static void treeViewMultiSelectItemChosen (int resultCode, ProjectTreeViewBase* item)
|
||||
{
|
||||
switch (resultCode)
|
||||
{
|
||||
case 1: item->deleteAllSelectedItems(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectTreeViewBase::showMultiSelectionPopupMenu()
|
||||
{
|
||||
PopupMenu m;
|
||||
m.addItem (1, "Delete");
|
||||
|
||||
m.showMenuAsync (PopupMenu::Options(),
|
||||
ModalCallbackFunction::create (treeViewMultiSelectItemChosen, this));
|
||||
}
|
||||
|
||||
String ProjectTreeViewBase::getTooltip()
|
||||
{
|
||||
return String::empty;
|
||||
}
|
||||
|
||||
var ProjectTreeViewBase::getDragSourceDescription()
|
||||
{
|
||||
cancelDelayedSelectionTimer();
|
||||
return projectItemDragType;
|
||||
}
|
||||
|
||||
int ProjectTreeViewBase::getMillisecsAllowedForDragGesture()
|
||||
{
|
||||
// for images, give the user longer to start dragging before assuming they're
|
||||
// clicking to select it for previewing..
|
||||
return item.isImageFile() ? 250 : JucerTreeViewBase::getMillisecsAllowedForDragGesture();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
ProjectTreeViewBase* ProjectTreeViewBase::getParentProjectItem() const
|
||||
{
|
||||
return dynamic_cast <ProjectTreeViewBase*> (getParentItem());
|
||||
}
|
||||
|
|
@ -1,118 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__
|
||||
#define __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__
|
||||
|
||||
#include "../jucer_Headers.h"
|
||||
#include "../Utility/jucer_JucerTreeViewBase.h"
|
||||
#include "jucer_Project.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class ProjectTreeViewBase : public JucerTreeViewBase,
|
||||
public ValueTree::Listener
|
||||
{
|
||||
protected:
|
||||
//==============================================================================
|
||||
ProjectTreeViewBase (const Project::Item& item);
|
||||
~ProjectTreeViewBase();
|
||||
|
||||
public:
|
||||
//==============================================================================
|
||||
virtual bool isRoot() const { return false; }
|
||||
|
||||
virtual bool acceptsFileDrop (const StringArray& files) const = 0;
|
||||
virtual bool acceptsDragItems (const OwnedArray <Project::Item>& selectedNodes) = 0;
|
||||
|
||||
//==============================================================================
|
||||
virtual String getDisplayName() const;
|
||||
virtual String getRenamingName() const { return getDisplayName(); }
|
||||
virtual void setName (const String& newName);
|
||||
virtual bool isMissing() { return isFileMissing; }
|
||||
virtual File getFile() const;
|
||||
|
||||
virtual void deleteItem();
|
||||
virtual void deleteAllSelectedItems();
|
||||
virtual void revealInFinder() const;
|
||||
virtual void browseToAddExistingFiles();
|
||||
virtual void checkFileStatus(); // (recursive)
|
||||
|
||||
virtual void addFiles (const StringArray& files, int insertIndex);
|
||||
virtual void moveSelectedItemsTo (OwnedArray <Project::Item>& selectedNodes, int insertIndex);
|
||||
virtual void showMultiSelectionPopupMenu();
|
||||
|
||||
virtual ProjectTreeViewBase* findTreeViewItem (const Project::Item& itemToFind);
|
||||
|
||||
//==============================================================================
|
||||
void valueTreePropertyChanged (ValueTree& tree, const Identifier& property) override;
|
||||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree& childWhichHasBeenAdded) override;
|
||||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree& childWhichHasBeenRemoved) override;
|
||||
void valueTreeChildOrderChanged (ValueTree& parentTree) override;
|
||||
void valueTreeParentChanged (ValueTree& tree) override;
|
||||
|
||||
//==============================================================================
|
||||
bool mightContainSubItems() override;
|
||||
String getUniqueName() const override;
|
||||
void itemOpennessChanged (bool isNowOpen) override;
|
||||
bool canBeSelected() const override { return true; }
|
||||
String getTooltip() override;
|
||||
var getDragSourceDescription() override;
|
||||
void addSubItems() override;
|
||||
|
||||
//==============================================================================
|
||||
// Drag-and-drop stuff..
|
||||
bool isInterestedInFileDrag (const StringArray& files) override;
|
||||
void filesDropped (const StringArray& files, int insertIndex) override;
|
||||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override;
|
||||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) override;
|
||||
int getMillisecsAllowedForDragGesture() override;
|
||||
|
||||
static void getAllSelectedNodesInTree (Component* componentInTree, OwnedArray <Project::Item>& selectedNodes);
|
||||
|
||||
File getDraggableFile() const override { return getFile(); }
|
||||
|
||||
//==============================================================================
|
||||
Project::Item item;
|
||||
|
||||
protected:
|
||||
bool isFileMissing;
|
||||
|
||||
//==============================================================================
|
||||
void treeChildrenChanged (const ValueTree& parentTree);
|
||||
virtual ProjectTreeViewBase* createSubItem (const Project::Item& node) = 0;
|
||||
|
||||
Icon getIcon() const override { return item.getIcon().withContrastingColourTo (getBackgroundColour()); }
|
||||
bool isIconCrossedOut() const override { return item.isIconCrossedOut(); }
|
||||
|
||||
//==============================================================================
|
||||
void triggerAsyncRename (const Project::Item& itemToRename);
|
||||
static void moveItems (OwnedArray <Project::Item>& selectedNodes,
|
||||
Project::Item destNode, int insertIndex);
|
||||
|
||||
ProjectTreeViewBase* getParentProjectItem() const;
|
||||
};
|
||||
|
||||
|
||||
#endif // __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__
|
||||
419
extras/Introjucer/Source/Project/jucer_ProjectTree_Base.h
Normal file
419
extras/Introjucer/Source/Project/jucer_ProjectTree_Base.h
Normal file
|
|
@ -0,0 +1,419 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
class ProjectTreeItemBase : public JucerTreeViewBase,
|
||||
public ValueTree::Listener
|
||||
{
|
||||
public:
|
||||
ProjectTreeItemBase (const Project::Item& projectItem)
|
||||
: item (projectItem), isFileMissing (false)
|
||||
{
|
||||
item.state.addListener (this);
|
||||
}
|
||||
|
||||
~ProjectTreeItemBase()
|
||||
{
|
||||
item.state.removeListener (this);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
virtual bool isRoot() const { return false; }
|
||||
|
||||
virtual bool acceptsFileDrop (const StringArray& files) const = 0;
|
||||
virtual bool acceptsDragItems (const OwnedArray<Project::Item>& selectedNodes) = 0;
|
||||
|
||||
//==============================================================================
|
||||
virtual String getDisplayName() const { return item.getName(); }
|
||||
virtual String getRenamingName() const { return getDisplayName(); }
|
||||
|
||||
virtual void setName (const String& newName)
|
||||
{
|
||||
if (item.isMainGroup())
|
||||
item.project.setTitle (newName);
|
||||
else
|
||||
item.getNameValue() = newName;
|
||||
}
|
||||
|
||||
virtual bool isMissing() { return isFileMissing; }
|
||||
virtual File getFile() const { return item.getFile(); }
|
||||
|
||||
virtual void deleteItem() { item.removeItemFromProject(); }
|
||||
|
||||
virtual void deleteAllSelectedItems()
|
||||
{
|
||||
TreeView* tree = getOwnerView();
|
||||
const int numSelected = tree->getNumSelectedItems();
|
||||
OwnedArray <File> filesToTrash;
|
||||
OwnedArray <Project::Item> itemsToRemove;
|
||||
|
||||
for (int i = 0; i < numSelected; ++i)
|
||||
{
|
||||
if (const ProjectTreeItemBase* const p = dynamic_cast<ProjectTreeItemBase*> (tree->getSelectedItem (i)))
|
||||
{
|
||||
itemsToRemove.add (new Project::Item (p->item));
|
||||
|
||||
if (p->getFile().existsAsFile())
|
||||
filesToTrash.add (new File (p->getFile()));
|
||||
}
|
||||
}
|
||||
|
||||
if (filesToTrash.size() > 0)
|
||||
{
|
||||
String fileList;
|
||||
const int maxFilesToList = 10;
|
||||
for (int i = jmin (maxFilesToList, filesToTrash.size()); --i >= 0;)
|
||||
fileList << filesToTrash.getUnchecked(i)->getFullPathName() << "\n";
|
||||
|
||||
if (filesToTrash.size() > maxFilesToList)
|
||||
fileList << "\n...plus " << (filesToTrash.size() - maxFilesToList) << " more files...";
|
||||
|
||||
int r = AlertWindow::showYesNoCancelBox (AlertWindow::NoIcon, "Delete Project Items",
|
||||
"As well as removing the selected item(s) from the project, do you also want to move their files to the trash:\n\n"
|
||||
+ fileList,
|
||||
"Just remove references",
|
||||
"Also move files to Trash",
|
||||
"Cancel",
|
||||
tree->getTopLevelComponent());
|
||||
|
||||
if (r == 0)
|
||||
return;
|
||||
|
||||
if (r != 2)
|
||||
filesToTrash.clear();
|
||||
}
|
||||
|
||||
if (ProjectTreeItemBase* treeRootItem = dynamic_cast<ProjectTreeItemBase*> (tree->getRootItem()))
|
||||
{
|
||||
OpenDocumentManager& om = IntrojucerApp::getApp().openDocumentManager;
|
||||
|
||||
for (int i = filesToTrash.size(); --i >= 0;)
|
||||
{
|
||||
const File f (*filesToTrash.getUnchecked(i));
|
||||
|
||||
om.closeFile (f, false);
|
||||
|
||||
if (! f.moveToTrash())
|
||||
{
|
||||
// xxx
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = itemsToRemove.size(); --i >= 0;)
|
||||
{
|
||||
if (ProjectTreeItemBase* itemToRemove = treeRootItem->findTreeViewItem (*itemsToRemove.getUnchecked(i)))
|
||||
{
|
||||
om.closeFile (itemToRemove->getFile(), false);
|
||||
itemToRemove->deleteItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jassertfalse;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void revealInFinder() const
|
||||
{
|
||||
getFile().revealToUser();
|
||||
}
|
||||
|
||||
virtual void browseToAddExistingFiles()
|
||||
{
|
||||
const File location (item.isGroup() ? item.determineGroupFolder() : getFile());
|
||||
FileChooser fc ("Add Files to Jucer Project", location, String::empty, false);
|
||||
|
||||
if (fc.browseForMultipleFilesOrDirectories())
|
||||
{
|
||||
StringArray files;
|
||||
|
||||
for (int i = 0; i < fc.getResults().size(); ++i)
|
||||
files.add (fc.getResults().getReference(i).getFullPathName());
|
||||
|
||||
addFiles (files, 0);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void checkFileStatus() // (recursive)
|
||||
{
|
||||
const File file (getFile());
|
||||
const bool nowMissing = file != File::nonexistent && ! file.exists();
|
||||
|
||||
if (nowMissing != isFileMissing)
|
||||
{
|
||||
isFileMissing = nowMissing;
|
||||
repaintItem();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void addFiles (const StringArray& files, int insertIndex)
|
||||
{
|
||||
if (ProjectTreeItemBase* p = getParentProjectItem())
|
||||
p->addFiles (files, insertIndex);
|
||||
}
|
||||
|
||||
virtual void moveSelectedItemsTo (OwnedArray <Project::Item>& selectedNodes, int insertIndex)
|
||||
{
|
||||
jassertfalse;
|
||||
}
|
||||
|
||||
virtual void showMultiSelectionPopupMenu()
|
||||
{
|
||||
PopupMenu m;
|
||||
m.addItem (1, "Delete");
|
||||
|
||||
m.showMenuAsync (PopupMenu::Options(),
|
||||
ModalCallbackFunction::create (treeViewMultiSelectItemChosen, this));
|
||||
}
|
||||
|
||||
static void treeViewMultiSelectItemChosen (int resultCode, ProjectTreeItemBase* item)
|
||||
{
|
||||
switch (resultCode)
|
||||
{
|
||||
case 1: item->deleteAllSelectedItems(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
virtual ProjectTreeItemBase* findTreeViewItem (const Project::Item& itemToFind)
|
||||
{
|
||||
if (item == itemToFind)
|
||||
return this;
|
||||
|
||||
const bool wasOpen = isOpen();
|
||||
setOpen (true);
|
||||
|
||||
for (int i = getNumSubItems(); --i >= 0;)
|
||||
{
|
||||
if (ProjectTreeItemBase* pg = dynamic_cast<ProjectTreeItemBase*> (getSubItem(i)))
|
||||
if (ProjectTreeItemBase* found = pg->findTreeViewItem (itemToFind))
|
||||
return found;
|
||||
}
|
||||
|
||||
setOpen (wasOpen);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void valueTreePropertyChanged (ValueTree& tree, const Identifier& property) override
|
||||
{
|
||||
if (tree == item.state)
|
||||
repaintItem();
|
||||
}
|
||||
|
||||
void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
|
||||
void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { treeChildrenChanged (parentTree); }
|
||||
void valueTreeChildOrderChanged (ValueTree& parentTree) override { treeChildrenChanged (parentTree); }
|
||||
void valueTreeParentChanged (ValueTree&) override {}
|
||||
|
||||
//==============================================================================
|
||||
bool mightContainSubItems() override { return item.getNumChildren() > 0; }
|
||||
String getUniqueName() const override { jassert (item.getID().isNotEmpty()); return item.getID(); }
|
||||
bool canBeSelected() const override { return true; }
|
||||
String getTooltip() override { return String::empty; }
|
||||
File getDraggableFile() const override { return getFile(); }
|
||||
|
||||
var getDragSourceDescription() override
|
||||
{
|
||||
cancelDelayedSelectionTimer();
|
||||
return projectItemDragType;
|
||||
}
|
||||
|
||||
void addSubItems() override
|
||||
{
|
||||
for (int i = 0; i < item.getNumChildren(); ++i)
|
||||
if (ProjectTreeItemBase* p = createSubItem (item.getChild(i)))
|
||||
addSubItem (p);
|
||||
}
|
||||
|
||||
void itemOpennessChanged (bool isNowOpen) override
|
||||
{
|
||||
if (isNowOpen)
|
||||
refreshSubItems();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool isInterestedInFileDrag (const StringArray& files) override
|
||||
{
|
||||
return acceptsFileDrop (files);
|
||||
}
|
||||
|
||||
void filesDropped (const StringArray& files, int insertIndex) override
|
||||
{
|
||||
addFiles (files, insertIndex);
|
||||
}
|
||||
|
||||
bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override
|
||||
{
|
||||
if (dragSourceDetails.description != projectItemDragType)
|
||||
return false;
|
||||
|
||||
OwnedArray <Project::Item> selectedNodes;
|
||||
getAllSelectedNodesInTree (dragSourceDetails.sourceComponent, selectedNodes);
|
||||
|
||||
return selectedNodes.size() > 0 && acceptsDragItems (selectedNodes);
|
||||
}
|
||||
|
||||
void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) override
|
||||
{
|
||||
OwnedArray <Project::Item> selectedNodes;
|
||||
getAllSelectedNodesInTree (dragSourceDetails.sourceComponent, selectedNodes);
|
||||
|
||||
if (selectedNodes.size() > 0)
|
||||
{
|
||||
TreeView* tree = getOwnerView();
|
||||
ScopedPointer <XmlElement> oldOpenness (tree->getOpennessState (false));
|
||||
|
||||
moveSelectedItemsTo (selectedNodes, insertIndex);
|
||||
|
||||
if (oldOpenness != nullptr)
|
||||
tree->restoreOpennessState (*oldOpenness, false);
|
||||
}
|
||||
}
|
||||
|
||||
int getMillisecsAllowedForDragGesture() override
|
||||
{
|
||||
// for images, give the user longer to start dragging before assuming they're
|
||||
// clicking to select it for previewing..
|
||||
return item.isImageFile() ? 250 : JucerTreeViewBase::getMillisecsAllowedForDragGesture();
|
||||
}
|
||||
|
||||
static void getAllSelectedNodesInTree (Component* componentInTree, OwnedArray <Project::Item>& selectedNodes)
|
||||
{
|
||||
TreeView* tree = dynamic_cast<TreeView*> (componentInTree);
|
||||
|
||||
if (tree == nullptr)
|
||||
tree = componentInTree->findParentComponentOfClass<TreeView>();
|
||||
|
||||
if (tree != nullptr)
|
||||
{
|
||||
const int numSelected = tree->getNumSelectedItems();
|
||||
|
||||
for (int i = 0; i < numSelected; ++i)
|
||||
if (const ProjectTreeItemBase* const p = dynamic_cast<ProjectTreeItemBase*> (tree->getSelectedItem (i)))
|
||||
selectedNodes.add (new Project::Item (p->item));
|
||||
}
|
||||
}
|
||||
|
||||
ProjectTreeItemBase* getParentProjectItem() const
|
||||
{
|
||||
return dynamic_cast<ProjectTreeItemBase*> (getParentItem());
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
Project::Item item;
|
||||
|
||||
protected:
|
||||
bool isFileMissing;
|
||||
|
||||
virtual ProjectTreeItemBase* createSubItem (const Project::Item& node) = 0;
|
||||
|
||||
Icon getIcon() const override { return item.getIcon().withContrastingColourTo (getBackgroundColour()); }
|
||||
bool isIconCrossedOut() const override { return item.isIconCrossedOut(); }
|
||||
|
||||
void treeChildrenChanged (const ValueTree& parentTree)
|
||||
{
|
||||
if (parentTree == item.state)
|
||||
{
|
||||
refreshSubItems();
|
||||
treeHasChanged();
|
||||
setOpen (true);
|
||||
}
|
||||
}
|
||||
|
||||
void triggerAsyncRename (const Project::Item& itemToRename)
|
||||
{
|
||||
class RenameMessage : public CallbackMessage
|
||||
{
|
||||
public:
|
||||
RenameMessage (TreeView* const t, const Project::Item& i)
|
||||
: tree (t), itemToRename (i) {}
|
||||
|
||||
void messageCallback() override
|
||||
{
|
||||
if (tree != nullptr)
|
||||
if (ProjectTreeItemBase* root = dynamic_cast<ProjectTreeItemBase*> (tree->getRootItem()))
|
||||
if (ProjectTreeItemBase* found = root->findTreeViewItem (itemToRename))
|
||||
found->showRenameBox();
|
||||
}
|
||||
|
||||
private:
|
||||
Component::SafePointer<TreeView> tree;
|
||||
Project::Item itemToRename;
|
||||
};
|
||||
|
||||
(new RenameMessage (getOwnerView(), itemToRename))->post();
|
||||
}
|
||||
|
||||
static void moveItems (OwnedArray <Project::Item>& selectedNodes, Project::Item destNode, int insertIndex)
|
||||
{
|
||||
for (int i = selectedNodes.size(); --i >= 0;)
|
||||
{
|
||||
Project::Item* const n = selectedNodes.getUnchecked(i);
|
||||
|
||||
if (destNode == *n || destNode.state.isAChildOf (n->state)) // Check for recursion.
|
||||
return;
|
||||
|
||||
if (! destNode.canContain (*n))
|
||||
selectedNodes.remove (i);
|
||||
}
|
||||
|
||||
// Don't include any nodes that are children of other selected nodes..
|
||||
for (int i = selectedNodes.size(); --i >= 0;)
|
||||
{
|
||||
Project::Item* const n = selectedNodes.getUnchecked(i);
|
||||
|
||||
for (int j = selectedNodes.size(); --j >= 0;)
|
||||
{
|
||||
if (j != i && n->state.isAChildOf (selectedNodes.getUnchecked(j)->state))
|
||||
{
|
||||
selectedNodes.remove (i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove and re-insert them one at a time..
|
||||
for (int i = 0; i < selectedNodes.size(); ++i)
|
||||
{
|
||||
Project::Item* selectedNode = selectedNodes.getUnchecked(i);
|
||||
|
||||
if (selectedNode->state.getParent() == destNode.state
|
||||
&& indexOfNode (destNode.state, selectedNode->state) < insertIndex)
|
||||
--insertIndex;
|
||||
|
||||
selectedNode->removeItemFromProject();
|
||||
destNode.addChild (*selectedNode, insertIndex++);
|
||||
}
|
||||
}
|
||||
|
||||
static int indexOfNode (const ValueTree& parent, const ValueTree& child)
|
||||
{
|
||||
for (int i = parent.getNumChildren(); --i >= 0;)
|
||||
if (parent.getChild (i) == child)
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
};
|
||||
154
extras/Introjucer/Source/Project/jucer_ProjectTree_File.h
Normal file
154
extras/Introjucer/Source/Project/jucer_ProjectTree_File.h
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
class SourceFileItem : public ProjectTreeItemBase
|
||||
{
|
||||
public:
|
||||
SourceFileItem (const Project::Item& projectItem)
|
||||
: ProjectTreeItemBase (projectItem)
|
||||
{
|
||||
}
|
||||
|
||||
bool acceptsFileDrop (const StringArray&) const { return false; }
|
||||
bool acceptsDragItems (const OwnedArray <Project::Item>&) { return false; }
|
||||
|
||||
String getDisplayName() const
|
||||
{
|
||||
return getFile().getFileName();
|
||||
}
|
||||
|
||||
static File findCorrespondingHeaderOrCpp (const File& f)
|
||||
{
|
||||
if (f.hasFileExtension (sourceFileExtensions))
|
||||
return f.withFileExtension (".h");
|
||||
else if (f.hasFileExtension (headerFileExtensions))
|
||||
return f.withFileExtension (".cpp");
|
||||
|
||||
return File::nonexistent;
|
||||
}
|
||||
|
||||
void setName (const String& newName)
|
||||
{
|
||||
if (newName != File::createLegalFileName (newName))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"That filename contained some illegal characters!");
|
||||
triggerAsyncRename (item);
|
||||
return;
|
||||
}
|
||||
|
||||
File oldFile (getFile());
|
||||
File newFile (oldFile.getSiblingFile (newName));
|
||||
File correspondingFile (findCorrespondingHeaderOrCpp (oldFile));
|
||||
|
||||
if (correspondingFile.exists() && newFile.hasFileExtension (oldFile.getFileExtension()))
|
||||
{
|
||||
Project::Item correspondingItem (item.project.getMainGroup().findItemForFile (correspondingFile));
|
||||
|
||||
if (correspondingItem.isValid())
|
||||
{
|
||||
if (AlertWindow::showOkCancelBox (AlertWindow::NoIcon, "File Rename",
|
||||
"Do you also want to rename the corresponding file \"" + correspondingFile.getFileName()
|
||||
+ "\" to match?"))
|
||||
{
|
||||
if (! item.renameFile (newFile))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"Failed to rename \"" + oldFile.getFullPathName() + "\"!\n\nCheck your file permissions!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (! correspondingItem.renameFile (newFile.withFileExtension (correspondingFile.getFileExtension())))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"Failed to rename \"" + correspondingFile.getFullPathName() + "\"!\n\nCheck your file permissions!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! item.renameFile (newFile))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"Failed to rename the file!\n\nCheck your file permissions!");
|
||||
}
|
||||
}
|
||||
|
||||
ProjectTreeItemBase* createSubItem (const Project::Item&)
|
||||
{
|
||||
jassertfalse;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void showDocument()
|
||||
{
|
||||
const File f (getFile());
|
||||
|
||||
if (f.exists())
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
pcc->showEditorForFile (f, false);
|
||||
}
|
||||
|
||||
void showPopupMenu()
|
||||
{
|
||||
PopupMenu m;
|
||||
|
||||
if (GroupItem* parentGroup = dynamic_cast<GroupItem*> (getParentProjectItem()))
|
||||
{
|
||||
parentGroup->addCreateFileMenuItems (m);
|
||||
m.addSeparator();
|
||||
}
|
||||
|
||||
m.addItem (1, "Open in external editor");
|
||||
m.addItem (2,
|
||||
#if JUCE_MAC
|
||||
"Reveal in Finder");
|
||||
#else
|
||||
"Reveal in Explorer");
|
||||
#endif
|
||||
|
||||
m.addItem (4, "Rename File...");
|
||||
m.addSeparator();
|
||||
m.addItem (3, "Delete");
|
||||
|
||||
launchPopupMenu (m);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode)
|
||||
{
|
||||
switch (resultCode)
|
||||
{
|
||||
case 1: getFile().startAsProcess(); break;
|
||||
case 2: revealInFinder(); break;
|
||||
case 3: deleteAllSelectedItems(); break;
|
||||
case 4: triggerAsyncRename (item); break;
|
||||
|
||||
default:
|
||||
if (GroupItem* parentGroup = dynamic_cast<GroupItem*> (getParentProjectItem()))
|
||||
parentGroup->processCreateFileMenuItem (resultCode);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
172
extras/Introjucer/Source/Project/jucer_ProjectTree_Group.h
Normal file
172
extras/Introjucer/Source/Project/jucer_ProjectTree_Group.h
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
class GroupItem : public ProjectTreeItemBase
|
||||
{
|
||||
public:
|
||||
GroupItem (const Project::Item& projectItem)
|
||||
: ProjectTreeItemBase (projectItem)
|
||||
{
|
||||
}
|
||||
|
||||
bool isRoot() const { return item.isMainGroup(); }
|
||||
bool acceptsFileDrop (const StringArray&) const { return true; }
|
||||
|
||||
void addNewGroup()
|
||||
{
|
||||
Project::Item newGroup (item.addNewSubGroup ("New Group", 0));
|
||||
triggerAsyncRename (newGroup);
|
||||
}
|
||||
|
||||
bool acceptsDragItems (const OwnedArray<Project::Item>& selectedNodes)
|
||||
{
|
||||
for (int i = selectedNodes.size(); --i >= 0;)
|
||||
if (item.canContain (*selectedNodes.getUnchecked(i)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void addFiles (const StringArray& files, int insertIndex)
|
||||
{
|
||||
for (int i = 0; i < files.size(); ++i)
|
||||
{
|
||||
const File file (files[i]);
|
||||
|
||||
if (item.addFile (file, insertIndex, true))
|
||||
++insertIndex;
|
||||
}
|
||||
}
|
||||
|
||||
void moveSelectedItemsTo (OwnedArray<Project::Item>& selectedNodes, int insertIndex)
|
||||
{
|
||||
moveItems (selectedNodes, item, insertIndex);
|
||||
}
|
||||
|
||||
void checkFileStatus()
|
||||
{
|
||||
for (int i = 0; i < getNumSubItems(); ++i)
|
||||
if (ProjectTreeItemBase* p = dynamic_cast<ProjectTreeItemBase*> (getSubItem(i)))
|
||||
p->checkFileStatus();
|
||||
}
|
||||
|
||||
ProjectTreeItemBase* createSubItem (const Project::Item& child)
|
||||
{
|
||||
if (child.isGroup()) return new GroupItem (child);
|
||||
if (child.isFile()) return new SourceFileItem (child);
|
||||
|
||||
jassertfalse;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void showDocument()
|
||||
{
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
pcc->setEditorComponent (new GroupInformationComponent (item), nullptr);
|
||||
}
|
||||
|
||||
static void openOrCloseAllSubGroups (TreeViewItem& item, bool shouldOpen)
|
||||
{
|
||||
item.setOpen (shouldOpen);
|
||||
|
||||
for (int i = item.getNumSubItems(); --i >= 0;)
|
||||
if (TreeViewItem* sub = item.getSubItem(i))
|
||||
openOrCloseAllSubGroups (*sub, shouldOpen);
|
||||
}
|
||||
|
||||
static void setFilesToCompile (Project::Item item, const bool shouldCompile)
|
||||
{
|
||||
if (item.isFile())
|
||||
item.getShouldCompileValue() = shouldCompile;
|
||||
|
||||
for (int i = item.getNumChildren(); --i >= 0;)
|
||||
setFilesToCompile (item.getChild (i), shouldCompile);
|
||||
}
|
||||
|
||||
void showPopupMenu()
|
||||
{
|
||||
PopupMenu m;
|
||||
addCreateFileMenuItems (m);
|
||||
|
||||
m.addSeparator();
|
||||
|
||||
if (isOpen())
|
||||
m.addItem (1, "Collapse all Sub-groups");
|
||||
else
|
||||
m.addItem (2, "Expand all Sub-groups");
|
||||
|
||||
m.addSeparator();
|
||||
m.addItem (3, "Enable compiling of all enclosed files");
|
||||
m.addItem (4, "Disable compiling of all enclosed files");
|
||||
|
||||
m.addSeparator();
|
||||
m.addItem (5, "Sort Items Alphabetically");
|
||||
m.addItem (6, "Sort Items Alphabetically (Groups first)");
|
||||
m.addSeparator();
|
||||
m.addItem (7, "Rename...");
|
||||
|
||||
if (! isRoot())
|
||||
m.addItem (8, "Delete");
|
||||
|
||||
launchPopupMenu (m);
|
||||
}
|
||||
|
||||
void handlePopupMenuResult (int resultCode)
|
||||
{
|
||||
switch (resultCode)
|
||||
{
|
||||
case 1: openOrCloseAllSubGroups (*this, false); break;
|
||||
case 2: openOrCloseAllSubGroups (*this, true); break;
|
||||
case 3: setFilesToCompile (item, true); break;
|
||||
case 4: setFilesToCompile (item, false); break;
|
||||
case 5: item.sortAlphabetically (false); break;
|
||||
case 6: item.sortAlphabetically (true); break;
|
||||
case 7: triggerAsyncRename (item); break;
|
||||
case 8: deleteAllSelectedItems(); break;
|
||||
default: processCreateFileMenuItem (resultCode); break;
|
||||
}
|
||||
}
|
||||
|
||||
void addCreateFileMenuItems (PopupMenu& m)
|
||||
{
|
||||
m.addItem (1001, "Add New Group");
|
||||
m.addItem (1002, "Add Existing Files...");
|
||||
|
||||
m.addSeparator();
|
||||
NewFileWizard().addWizardsToMenu (m);
|
||||
}
|
||||
|
||||
void processCreateFileMenuItem (int menuID)
|
||||
{
|
||||
switch (menuID)
|
||||
{
|
||||
case 1001: addNewGroup(); break;
|
||||
case 1002: browseToAddExistingFiles(); break;
|
||||
|
||||
default:
|
||||
NewFileWizard().runWizardFromMenu (menuID, item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -1,308 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "jucer_TreeViewTypes.h"
|
||||
#include "jucer_ConfigPage.h"
|
||||
#include "jucer_GroupInformationComponent.h"
|
||||
#include "../Application/jucer_OpenDocumentManager.h"
|
||||
#include "../Code Editor/jucer_SourceCodeEditor.h"
|
||||
#include "jucer_NewFileWizard.h"
|
||||
#include "jucer_ProjectContentComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
GroupTreeViewItem::GroupTreeViewItem (const Project::Item& i)
|
||||
: ProjectTreeViewBase (i)
|
||||
{
|
||||
}
|
||||
|
||||
GroupTreeViewItem::~GroupTreeViewItem()
|
||||
{
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::addNewGroup()
|
||||
{
|
||||
Project::Item newGroup (item.addNewSubGroup ("New Group", 0));
|
||||
triggerAsyncRename (newGroup);
|
||||
}
|
||||
|
||||
bool GroupTreeViewItem::acceptsDragItems (const OwnedArray <Project::Item>& selectedNodes)
|
||||
{
|
||||
for (int i = selectedNodes.size(); --i >= 0;)
|
||||
if (item.canContain (*selectedNodes.getUnchecked(i)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::addFiles (const StringArray& files, int insertIndex)
|
||||
{
|
||||
for (int i = 0; i < files.size(); ++i)
|
||||
{
|
||||
const File file (files[i]);
|
||||
|
||||
if (item.addFile (file, insertIndex, true))
|
||||
++insertIndex;
|
||||
}
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::moveSelectedItemsTo (OwnedArray <Project::Item>& selectedNodes, int insertIndex)
|
||||
{
|
||||
moveItems (selectedNodes, item, insertIndex);
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::checkFileStatus()
|
||||
{
|
||||
for (int i = 0; i < getNumSubItems(); ++i)
|
||||
if (ProjectTreeViewBase* p = dynamic_cast <ProjectTreeViewBase*> (getSubItem(i)))
|
||||
p->checkFileStatus();
|
||||
}
|
||||
|
||||
ProjectTreeViewBase* GroupTreeViewItem::createSubItem (const Project::Item& child)
|
||||
{
|
||||
if (child.isGroup()) return new GroupTreeViewItem (child);
|
||||
if (child.isFile()) return new SourceFileTreeViewItem (child);
|
||||
|
||||
jassertfalse;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::showDocument()
|
||||
{
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
pcc->setEditorComponent (new GroupInformationComponent (item), nullptr);
|
||||
}
|
||||
|
||||
static void openOrCloseAllSubGroups (TreeViewItem& item, bool shouldOpen)
|
||||
{
|
||||
item.setOpen (shouldOpen);
|
||||
|
||||
for (int i = item.getNumSubItems(); --i >= 0;)
|
||||
if (TreeViewItem* sub = item.getSubItem(i))
|
||||
openOrCloseAllSubGroups (*sub, shouldOpen);
|
||||
}
|
||||
|
||||
static void setFilesToCompile (Project::Item item, const bool shouldCompile)
|
||||
{
|
||||
if (item.isFile())
|
||||
item.getShouldCompileValue() = shouldCompile;
|
||||
|
||||
for (int i = item.getNumChildren(); --i >= 0;)
|
||||
setFilesToCompile (item.getChild (i), shouldCompile);
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::showPopupMenu()
|
||||
{
|
||||
PopupMenu m;
|
||||
addCreateFileMenuItems (m);
|
||||
|
||||
m.addSeparator();
|
||||
|
||||
if (isOpen())
|
||||
m.addItem (1, "Collapse all Sub-groups");
|
||||
else
|
||||
m.addItem (2, "Expand all Sub-groups");
|
||||
|
||||
m.addSeparator();
|
||||
m.addItem (3, "Enable compiling of all enclosed files");
|
||||
m.addItem (4, "Disable compiling of all enclosed files");
|
||||
|
||||
m.addSeparator();
|
||||
m.addItem (5, "Sort Items Alphabetically");
|
||||
m.addItem (6, "Sort Items Alphabetically (Groups first)");
|
||||
m.addSeparator();
|
||||
m.addItem (7, "Rename...");
|
||||
|
||||
if (! isRoot())
|
||||
m.addItem (8, "Delete");
|
||||
|
||||
launchPopupMenu (m);
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::handlePopupMenuResult (int resultCode)
|
||||
{
|
||||
switch (resultCode)
|
||||
{
|
||||
case 1: openOrCloseAllSubGroups (*this, false); break;
|
||||
case 2: openOrCloseAllSubGroups (*this, true); break;
|
||||
case 3: setFilesToCompile (item, true); break;
|
||||
case 4: setFilesToCompile (item, false); break;
|
||||
case 5: item.sortAlphabetically (false); break;
|
||||
case 6: item.sortAlphabetically (true); break;
|
||||
case 7: triggerAsyncRename (item); break;
|
||||
case 8: deleteAllSelectedItems(); break;
|
||||
default: processCreateFileMenuItem (resultCode); break;
|
||||
}
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::addCreateFileMenuItems (PopupMenu& m)
|
||||
{
|
||||
m.addItem (1001, "Add New Group");
|
||||
m.addItem (1002, "Add Existing Files...");
|
||||
|
||||
m.addSeparator();
|
||||
NewFileWizard().addWizardsToMenu (m);
|
||||
}
|
||||
|
||||
void GroupTreeViewItem::processCreateFileMenuItem (int menuID)
|
||||
{
|
||||
switch (menuID)
|
||||
{
|
||||
case 1001: addNewGroup(); break;
|
||||
case 1002: browseToAddExistingFiles(); break;
|
||||
|
||||
default:
|
||||
NewFileWizard().runWizardFromMenu (menuID, item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
//==============================================================================
|
||||
SourceFileTreeViewItem::SourceFileTreeViewItem (const Project::Item& item_)
|
||||
: ProjectTreeViewBase (item_)
|
||||
{
|
||||
}
|
||||
|
||||
SourceFileTreeViewItem::~SourceFileTreeViewItem()
|
||||
{
|
||||
}
|
||||
|
||||
String SourceFileTreeViewItem::getDisplayName() const
|
||||
{
|
||||
return getFile().getFileName();
|
||||
}
|
||||
|
||||
static File findCorrespondingHeaderOrCpp (const File& f)
|
||||
{
|
||||
if (f.hasFileExtension (sourceFileExtensions))
|
||||
return f.withFileExtension (".h");
|
||||
else if (f.hasFileExtension (headerFileExtensions))
|
||||
return f.withFileExtension (".cpp");
|
||||
|
||||
return File::nonexistent;
|
||||
}
|
||||
|
||||
void SourceFileTreeViewItem::setName (const String& newName)
|
||||
{
|
||||
if (newName != File::createLegalFileName (newName))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"That filename contained some illegal characters!");
|
||||
triggerAsyncRename (item);
|
||||
return;
|
||||
}
|
||||
|
||||
File oldFile (getFile());
|
||||
File newFile (oldFile.getSiblingFile (newName));
|
||||
File correspondingFile (findCorrespondingHeaderOrCpp (oldFile));
|
||||
|
||||
if (correspondingFile.exists() && newFile.hasFileExtension (oldFile.getFileExtension()))
|
||||
{
|
||||
Project::Item correspondingItem (item.project.getMainGroup().findItemForFile (correspondingFile));
|
||||
|
||||
if (correspondingItem.isValid())
|
||||
{
|
||||
if (AlertWindow::showOkCancelBox (AlertWindow::NoIcon, "File Rename",
|
||||
"Do you also want to rename the corresponding file \"" + correspondingFile.getFileName()
|
||||
+ "\" to match?"))
|
||||
{
|
||||
if (! item.renameFile (newFile))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"Failed to rename \"" + oldFile.getFullPathName() + "\"!\n\nCheck your file permissions!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (! correspondingItem.renameFile (newFile.withFileExtension (correspondingFile.getFileExtension())))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"Failed to rename \"" + correspondingFile.getFullPathName() + "\"!\n\nCheck your file permissions!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! item.renameFile (newFile))
|
||||
{
|
||||
AlertWindow::showMessageBox (AlertWindow::WarningIcon, "File Rename",
|
||||
"Failed to rename the file!\n\nCheck your file permissions!");
|
||||
}
|
||||
}
|
||||
|
||||
ProjectTreeViewBase* SourceFileTreeViewItem::createSubItem (const Project::Item&)
|
||||
{
|
||||
jassertfalse;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void SourceFileTreeViewItem::showDocument()
|
||||
{
|
||||
const File f (getFile());
|
||||
|
||||
if (f.exists())
|
||||
if (ProjectContentComponent* pcc = getProjectContentComponent())
|
||||
pcc->showEditorForFile (f, false);
|
||||
}
|
||||
|
||||
void SourceFileTreeViewItem::showPopupMenu()
|
||||
{
|
||||
PopupMenu m;
|
||||
|
||||
if (GroupTreeViewItem* parentGroup = dynamic_cast <GroupTreeViewItem*> (getParentProjectItem()))
|
||||
{
|
||||
parentGroup->addCreateFileMenuItems (m);
|
||||
m.addSeparator();
|
||||
}
|
||||
|
||||
m.addItem (1, "Open in external editor");
|
||||
m.addItem (2,
|
||||
#if JUCE_MAC
|
||||
"Reveal in Finder");
|
||||
#else
|
||||
"Reveal in Explorer");
|
||||
#endif
|
||||
|
||||
m.addItem (4, "Rename File...");
|
||||
m.addSeparator();
|
||||
m.addItem (3, "Delete");
|
||||
|
||||
launchPopupMenu (m);
|
||||
}
|
||||
|
||||
void SourceFileTreeViewItem::handlePopupMenuResult (int resultCode)
|
||||
{
|
||||
switch (resultCode)
|
||||
{
|
||||
case 1: getFile().startAsProcess(); break;
|
||||
case 2: revealInFinder(); break;
|
||||
case 3: deleteAllSelectedItems(); break;
|
||||
case 4: triggerAsyncRename (item); break;
|
||||
|
||||
default:
|
||||
if (GroupTreeViewItem* parentGroup = dynamic_cast <GroupTreeViewItem*> (getParentProjectItem()))
|
||||
parentGroup->processCreateFileMenuItem (resultCode);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
||||
|
||||
Permission is granted to use this software under the terms of either:
|
||||
a) the GPL v2 (or any later version)
|
||||
b) the Affero GPL v3
|
||||
|
||||
Details of these licenses can be found at: www.gnu.org/licenses
|
||||
|
||||
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
To release a closed-source product which uses JUCE, commercial licenses are
|
||||
available: visit www.juce.com for more information.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef __JUCER_TREEVIEWTYPES_JUCEHEADER__
|
||||
#define __JUCER_TREEVIEWTYPES_JUCEHEADER__
|
||||
|
||||
#include "jucer_ProjectTreeViewBase.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class SourceFileTreeViewItem : public ProjectTreeViewBase
|
||||
{
|
||||
public:
|
||||
SourceFileTreeViewItem (const Project::Item& item);
|
||||
~SourceFileTreeViewItem();
|
||||
|
||||
bool acceptsFileDrop (const StringArray&) const { return false; }
|
||||
bool acceptsDragItems (const OwnedArray <Project::Item>&) { return false; }
|
||||
ProjectTreeViewBase* createSubItem (const Project::Item& child);
|
||||
void showDocument();
|
||||
void showPopupMenu();
|
||||
void handlePopupMenuResult (int resultCode);
|
||||
String getDisplayName() const;
|
||||
void setName (const String& newName);
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class GroupTreeViewItem : public ProjectTreeViewBase
|
||||
{
|
||||
public:
|
||||
GroupTreeViewItem (const Project::Item& item);
|
||||
~GroupTreeViewItem();
|
||||
|
||||
bool isRoot() const { return item.isMainGroup(); }
|
||||
bool acceptsFileDrop (const StringArray&) const { return true; }
|
||||
bool acceptsDragItems (const OwnedArray <Project::Item>& selectedNodes);
|
||||
void checkFileStatus();
|
||||
void moveSelectedItemsTo (OwnedArray <Project::Item>& selectedNodes, int insertIndex);
|
||||
ProjectTreeViewBase* createSubItem (const Project::Item& child);
|
||||
void showDocument();
|
||||
void showPopupMenu();
|
||||
void handlePopupMenuResult (int resultCode);
|
||||
|
||||
void addFiles (const StringArray& files, int insertIndex);
|
||||
void addNewGroup();
|
||||
|
||||
void addCreateFileMenuItems (PopupMenu& m);
|
||||
void processCreateFileMenuItem (int item);
|
||||
};
|
||||
|
||||
|
||||
#endif // __JUCER_TREEVIEWTYPES_JUCEHEADER__
|
||||
Loading…
Add table
Add a link
Reference in a new issue