1
0
Fork 0
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:
jules 2013-09-21 22:18:05 +01:00
parent d42783465b
commit 9113a7d6ab
25 changed files with 1537 additions and 1745 deletions

View file

@ -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"/>

View file

@ -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"

View file

@ -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,

View file

@ -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"/>

View file

@ -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"/>

View file

@ -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"/>

View file

@ -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>

View file

@ -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"/>

View file

@ -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>

View file

@ -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"

View file

@ -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";

View file

@ -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);
}

View file

@ -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__

View 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)
};

View 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)
};

View 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)
};

View file

@ -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

View file

@ -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)

View file

@ -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());
}

View file

@ -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__

View 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;
}
};

View 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;
}
}
};

View 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;
}
}
};

View file

@ -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;
}
}

View file

@ -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__