| @@ -43,30 +43,30 @@ ifeq ($(CONFIG),Release) | |||
| endif | |||
| OBJECTS := \ | |||
| $(OBJDIR)/jucer_ComponentTypeManager.o \ | |||
| $(OBJDIR)/jucer_ComponentDocument.o \ | |||
| $(OBJDIR)/jucer_CodeGenerator.o \ | |||
| $(OBJDIR)/jucer_Coordinate.o \ | |||
| $(OBJDIR)/jucer_ComponentDocument.o \ | |||
| $(OBJDIR)/jucer_ComponentTypeManager.o \ | |||
| $(OBJDIR)/jucer_DrawableDocument.o \ | |||
| $(OBJDIR)/jucer_NewFileWizard.o \ | |||
| $(OBJDIR)/jucer_Project.o \ | |||
| $(OBJDIR)/jucer_ProjectExporter.o \ | |||
| $(OBJDIR)/jucer_ProjectWizard.o \ | |||
| $(OBJDIR)/jucer_ResourceFile.o \ | |||
| $(OBJDIR)/jucer_SourceCodeEditor.o \ | |||
| $(OBJDIR)/jucer_ComponentEditor.o \ | |||
| $(OBJDIR)/jucer_ComponentEditorCanvas.o \ | |||
| $(OBJDIR)/jucer_DrawableEditor.o \ | |||
| $(OBJDIR)/jucer_EditorCanvas.o \ | |||
| $(OBJDIR)/jucer_DocumentEditorComponent.o \ | |||
| $(OBJDIR)/jucer_GroupInformationComponent.o \ | |||
| $(OBJDIR)/jucer_ItemPreviewComponent.o \ | |||
| $(OBJDIR)/jucer_JucerTreeViewBase.o \ | |||
| $(OBJDIR)/jucer_MainWindow.o \ | |||
| $(OBJDIR)/jucer_OpenDocumentManager.o \ | |||
| $(OBJDIR)/jucer_GroupInformationComponent.o \ | |||
| $(OBJDIR)/jucer_ItemPreviewComponent.o \ | |||
| $(OBJDIR)/jucer_ProjectContentComponent.o \ | |||
| $(OBJDIR)/jucer_ProjectInformationComponent.o \ | |||
| $(OBJDIR)/jucer_ProjectTreeViewBase.o \ | |||
| $(OBJDIR)/jucer_SourceCodeEditor.o \ | |||
| $(OBJDIR)/jucer_TreeViewTypes.o \ | |||
| $(OBJDIR)/jucer_Coordinate.o \ | |||
| $(OBJDIR)/jucer_StoredSettings.o \ | |||
| $(OBJDIR)/jucer_UtilityFunctions.o \ | |||
| $(OBJDIR)/jucer_Main.o \ | |||
| @@ -91,52 +91,52 @@ clean: | |||
| -@rm -rf $(OBJDIR)/* | |||
| -@rm -rf $(OBJDIR) | |||
| $(OBJDIR)/jucer_ComponentTypeManager.o: ../../Source/model/Component\ Types/jucer_ComponentTypeManager.cpp | |||
| $(OBJDIR)/jucer_CodeGenerator.o: ../../Source/model/Component/jucer_CodeGenerator.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ComponentDocument.o: ../../Source/model/jucer_ComponentDocument.cpp | |||
| $(OBJDIR)/jucer_ComponentDocument.o: ../../Source/model/Component/jucer_ComponentDocument.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_CodeGenerator.o: ../../Source/model/jucer_CodeGenerator.cpp | |||
| $(OBJDIR)/jucer_ComponentTypeManager.o: ../../Source/model/Component/Types/jucer_ComponentTypeManager.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_Coordinate.o: ../../Source/model/jucer_Coordinate.cpp | |||
| $(OBJDIR)/jucer_DrawableDocument.o: ../../Source/model/Drawable/jucer_DrawableDocument.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_DrawableDocument.o: ../../Source/model/jucer_DrawableDocument.cpp | |||
| $(OBJDIR)/jucer_NewFileWizard.o: ../../Source/model/Project/jucer_NewFileWizard.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_NewFileWizard.o: ../../Source/model/jucer_NewFileWizard.cpp | |||
| $(OBJDIR)/jucer_Project.o: ../../Source/model/Project/jucer_Project.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_Project.o: ../../Source/model/jucer_Project.cpp | |||
| $(OBJDIR)/jucer_ProjectExporter.o: ../../Source/model/Project/jucer_ProjectExporter.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ProjectExporter.o: ../../Source/model/jucer_ProjectExporter.cpp | |||
| $(OBJDIR)/jucer_ProjectWizard.o: ../../Source/model/Project/jucer_ProjectWizard.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ProjectWizard.o: ../../Source/model/jucer_ProjectWizard.cpp | |||
| $(OBJDIR)/jucer_ResourceFile.o: ../../Source/model/Project/jucer_ResourceFile.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ResourceFile.o: ../../Source/model/jucer_ResourceFile.cpp | |||
| $(OBJDIR)/jucer_SourceCodeEditor.o: ../../Source/ui/Code\ Editor/jucer_SourceCodeEditor.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| @@ -146,12 +146,12 @@ $(OBJDIR)/jucer_ComponentEditor.o: ../../Source/ui/Component\ Editor/jucer_Compo | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ComponentEditorCanvas.o: ../../Source/ui/Component\ Editor/jucer_ComponentEditorCanvas.cpp | |||
| $(OBJDIR)/jucer_DrawableEditor.o: ../../Source/ui/Drawable\ Editor/jucer_DrawableEditor.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_DrawableEditor.o: ../../Source/ui/Drawable\ Editor/jucer_DrawableEditor.cpp | |||
| $(OBJDIR)/jucer_EditorCanvas.o: ../../Source/ui/Editor\ Base/jucer_EditorCanvas.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| @@ -161,52 +161,52 @@ $(OBJDIR)/jucer_DocumentEditorComponent.o: ../../Source/ui/jucer_DocumentEditorC | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_GroupInformationComponent.o: ../../Source/ui/jucer_GroupInformationComponent.cpp | |||
| $(OBJDIR)/jucer_JucerTreeViewBase.o: ../../Source/ui/jucer_JucerTreeViewBase.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ItemPreviewComponent.o: ../../Source/ui/jucer_ItemPreviewComponent.cpp | |||
| $(OBJDIR)/jucer_MainWindow.o: ../../Source/ui/jucer_MainWindow.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_JucerTreeViewBase.o: ../../Source/ui/jucer_JucerTreeViewBase.cpp | |||
| $(OBJDIR)/jucer_OpenDocumentManager.o: ../../Source/ui/jucer_OpenDocumentManager.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_MainWindow.o: ../../Source/ui/jucer_MainWindow.cpp | |||
| $(OBJDIR)/jucer_GroupInformationComponent.o: ../../Source/ui/Project\ Editor/jucer_GroupInformationComponent.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_OpenDocumentManager.o: ../../Source/ui/jucer_OpenDocumentManager.cpp | |||
| $(OBJDIR)/jucer_ItemPreviewComponent.o: ../../Source/ui/Project\ Editor/jucer_ItemPreviewComponent.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ProjectContentComponent.o: ../../Source/ui/jucer_ProjectContentComponent.cpp | |||
| $(OBJDIR)/jucer_ProjectContentComponent.o: ../../Source/ui/Project\ Editor/jucer_ProjectContentComponent.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ProjectInformationComponent.o: ../../Source/ui/jucer_ProjectInformationComponent.cpp | |||
| $(OBJDIR)/jucer_ProjectInformationComponent.o: ../../Source/ui/Project\ Editor/jucer_ProjectInformationComponent.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_ProjectTreeViewBase.o: ../../Source/ui/jucer_ProjectTreeViewBase.cpp | |||
| $(OBJDIR)/jucer_ProjectTreeViewBase.o: ../../Source/ui/Project\ Editor/jucer_ProjectTreeViewBase.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_SourceCodeEditor.o: ../../Source/ui/jucer_SourceCodeEditor.cpp | |||
| $(OBJDIR)/jucer_TreeViewTypes.o: ../../Source/ui/Project\ Editor/jucer_TreeViewTypes.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| $(OBJDIR)/jucer_TreeViewTypes.o: ../../Source/ui/jucer_TreeViewTypes.cpp | |||
| $(OBJDIR)/jucer_Coordinate.o: ../../Source/utility/jucer_Coordinate.cpp | |||
| -@mkdir -p $(OBJDIR) | |||
| @echo $(notdir $<) | |||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||
| @@ -17,30 +17,30 @@ | |||
| DBE3CE9482B19CF1AE700805 = { isa = PBXBuildFile; fileRef = 23CF69B4C644D1E6E61E5C82; }; | |||
| 93C9F3F27602A33DDC9C2250 = { isa = PBXBuildFile; fileRef = 2767E1D082874D301D5D5F43; }; | |||
| 2E6836738CE7EB452FDC7E9A = { isa = PBXBuildFile; fileRef = D9FB1A5365FEEB854A0FF7BF; }; | |||
| 52D75B8B0F52DD4F37A4B1C0 = { isa = PBXBuildFile; fileRef = 82A1EC47692975C7031B3973; }; | |||
| CD4226951C3F7FE19CF8A7CE = { isa = PBXBuildFile; fileRef = 2D6D6985B452EA0B67A18914; }; | |||
| 8E859D542404B684D5E1545F = { isa = PBXBuildFile; fileRef = 42CEC4195577AE91AA6CBA7F; }; | |||
| 1DF9688E29753A0459E6C32A = { isa = PBXBuildFile; fileRef = 45C80436FD5A8438D0E6BE17; }; | |||
| 1174D3512AF8207950094C56 = { isa = PBXBuildFile; fileRef = FF625CB50FB5C3536BA40604; }; | |||
| 087CCE9E7146F1EC4F241254 = { isa = PBXBuildFile; fileRef = DA142548FCADFAC50648ED3C; }; | |||
| E9935BFB0EFA8CCCD41DC08E = { isa = PBXBuildFile; fileRef = D47A40CB3CF6AAE14B3C7796; }; | |||
| 60CDC1358E84801B6526E434 = { isa = PBXBuildFile; fileRef = FE9A53032395E717F54AE85B; }; | |||
| EEC6FC8E546C88C825411DB2 = { isa = PBXBuildFile; fileRef = 0AD266A3E698D40DCD88A432; }; | |||
| B2B821DE12F1679A3ADA597A = { isa = PBXBuildFile; fileRef = DBE9A3BB502125C5D3433AE7; }; | |||
| A7EB756F566FB773ABE3DFA9 = { isa = PBXBuildFile; fileRef = 1BCF8B6367CCC73AEEF03818; }; | |||
| 061C981D0E9FB70DE5A3D32C = { isa = PBXBuildFile; fileRef = 829C5DA65FB46B99756428C5; }; | |||
| FEDBCD721085272D356BBAEB = { isa = PBXBuildFile; fileRef = D08D9DB99315F76093CF6EE6; }; | |||
| 268807D7091702D29033CC27 = { isa = PBXBuildFile; fileRef = B1471E8698D193FBCF0DD13D; }; | |||
| 06838545183964D8C1E60530 = { isa = PBXBuildFile; fileRef = 9DCB32BBD7053ACCB598CE79; }; | |||
| 048D33BDE7413EFE05D09901 = { isa = PBXBuildFile; fileRef = 4179D4C7BF616A4A3C3E11CA; }; | |||
| 9DA1913A62297D7111E0A6C9 = { isa = PBXBuildFile; fileRef = 48A4236550741B9D05208C60; }; | |||
| 44C2E5705EEA4F01309D8960 = { isa = PBXBuildFile; fileRef = 9034F31FCBD5A2A297427537; }; | |||
| 7C9FFFC0B129F5C3FAEE13E9 = { isa = PBXBuildFile; fileRef = A6D148E4503AAD3DE6DDCD8B; }; | |||
| 33E1A095D656AF109DD54170 = { isa = PBXBuildFile; fileRef = 31F175F277299B3CEA857F96; }; | |||
| D706C3B5016318D85FE452C2 = { isa = PBXBuildFile; fileRef = 3263F4099F45D6FACD28F08D; }; | |||
| CDB5102BEFD7C18BD28709F3 = { isa = PBXBuildFile; fileRef = 81D9A078702EFE0A32C037A1; }; | |||
| E43D00B370F289420379B759 = { isa = PBXBuildFile; fileRef = 82F91CF84A296665177CB79A; }; | |||
| EFFCA85EFB4F06F1BEB9AB97 = { isa = PBXBuildFile; fileRef = 03E9C079FBBF727D50A2B678; }; | |||
| 944CE0EADAD951F48EC77071 = { isa = PBXBuildFile; fileRef = 3B2C45064E85B3B631D4F921; }; | |||
| 4E8860E0F8680956A6F5B493 = { isa = PBXBuildFile; fileRef = 8F731296532276CBF2B6190D; }; | |||
| 288F5E7A2EC305BB4D8D73D1 = { isa = PBXBuildFile; fileRef = 1E7EDE73A92751752BC90A62; }; | |||
| 2417927E323BFE201D5985B9 = { isa = PBXBuildFile; fileRef = 3C60CAE9481EE0113C15A0B9; }; | |||
| A1CB18029E09A66E192D9A29 = { isa = PBXBuildFile; fileRef = 17F5B1F00F15DB37EA4A4AEA; }; | |||
| F8C762CCE16669F76D2209B9 = { isa = PBXBuildFile; fileRef = 118A505BA7079B3C8C9B858B; }; | |||
| 4FF75A3C7DCB9FD245320FE6 = { isa = PBXBuildFile; fileRef = 487D3D6777F8C3E26C0D5887; }; | |||
| A70AED2E35B809981470A547 = { isa = PBXBuildFile; fileRef = 9170F22B59096F151A9FFFB3; }; | |||
| 4D6C7380B8BB0BA9470C146C = { isa = PBXBuildFile; fileRef = AEE4E1F518A91ABB386CFD9E; }; | |||
| 438FED16CFDB36A4BE1F5F35 = { isa = PBXBuildFile; fileRef = E55B34E6694D69E3DBB107D1; }; | |||
| 33A4BAAD7A79BA63E78CB503 = { isa = PBXBuildFile; fileRef = B4439D672F2977238755E1E2; }; | |||
| 496F7F18FCBE1E212F62E328 = { isa = PBXBuildFile; fileRef = 63C3715BB513E5F84B1159AB; }; | |||
| BFFA4F695DDFEA8EE6CE7241 = { isa = PBXBuildFile; fileRef = 3E8A127EE612399B57B82B4C; }; | |||
| C74E7F0701EF10141D5C1D9D = { isa = PBXBuildFile; fileRef = 742E74D389224CCB863822AD; }; | |||
| 54CF219EADAD8E6DC7D20A8E = { isa = PBXBuildFile; fileRef = E4BED7589BF4391ECB067DBC; }; | |||
| 984444E3B2947675DC7D65DA = { isa = PBXBuildFile; fileRef = 1FDE55685608689765ADC578; }; | |||
| 58BF60E87F9A8EDCACC5D1AE = { isa = PBXBuildFile; fileRef = 939E2A7946081DB4D21B89B6; }; | |||
| 5BF87265418D736250283182 = { isa = PBXBuildFile; fileRef = C7ADB43F83A83FFC08921A12; }; | |||
| DDAB225ABE572196882C3524 = { isa = PBXBuildFile; fileRef = 7A1CD936BD306A6E0BEFB046; }; | |||
| FA8C72364CDFD2B76F16C0F1 = { isa = PBXBuildFile; fileRef = E3BD76BDB547509885E14DEE; }; | |||
| 6B6B0EBBE899B0ACDCAD92F5 = { isa = PBXBuildFile; fileRef = 0DC331A7B856F30AD266A3E6; }; | |||
| @@ -62,80 +62,84 @@ | |||
| D9FB1A5365FEEB854A0FF7BF = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; }; | |||
| 12E1601866B3489844AFD645 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Jucer.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| F4C5CF1AA7EB9298043D89D3 = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = SOURCE_ROOT; }; | |||
| 82A1EC47692975C7031B3973 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentTypeManager.cpp; path = "../../Source/model/Component Types/jucer_ComponentTypeManager.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 4F23FF649E7BA3A0F737E3BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypeManager.h; path = "../../Source/model/Component Types/jucer_ComponentTypeManager.h"; sourceTree = SOURCE_ROOT; }; | |||
| 6FD54B7E8992FD692BAA0DC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypes.h; path = "../../Source/model/Component Types/jucer_ComponentTypes.h"; sourceTree = SOURCE_ROOT; }; | |||
| 926FC04F4EAF24C7C4671207 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComboBox.h; path = "../../Source/model/Component Types/jucer_ComboBox.h"; sourceTree = SOURCE_ROOT; }; | |||
| C6263909812DBE995167932B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GenericComponent.h; path = "../../Source/model/Component Types/jucer_GenericComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| 6B5504F7274B11DFAD3B2E26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupComponent.h; path = "../../Source/model/Component Types/jucer_GroupComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| 133385B65A02DF50291B222F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerComponent.h; path = "../../Source/model/Component Types/jucer_JucerComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| C64A89EA5C3F0A701F9EBA79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Label.h; path = "../../Source/model/Component Types/jucer_Label.h"; sourceTree = SOURCE_ROOT; }; | |||
| 40716207B98461E05DC46F14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Slider.h; path = "../../Source/model/Component Types/jucer_Slider.h"; sourceTree = SOURCE_ROOT; }; | |||
| 4A22DE9DF590115F174CA70E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TabbedComponent.h; path = "../../Source/model/Component Types/jucer_TabbedComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| E18C99BDD4EF3DFD767F3770 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextButton.h; path = "../../Source/model/Component Types/jucer_TextButton.h"; sourceTree = SOURCE_ROOT; }; | |||
| 1BBF86F1D833DAD4A1503C82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextEditor.h; path = "../../Source/model/Component Types/jucer_TextEditor.h"; sourceTree = SOURCE_ROOT; }; | |||
| A6FAA90B494DCD7CA5911196 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ToggleButton.h; path = "../../Source/model/Component Types/jucer_ToggleButton.h"; sourceTree = SOURCE_ROOT; }; | |||
| 03AD2BF6C80C6AF47BBDB7E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Viewport.h; path = "../../Source/model/Component Types/jucer_Viewport.h"; sourceTree = SOURCE_ROOT; }; | |||
| 2D6D6985B452EA0B67A18914 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentDocument.cpp; path = ../../Source/model/jucer_ComponentDocument.cpp; sourceTree = SOURCE_ROOT; }; | |||
| E6CC3A04349F6B227FDAB26F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentDocument.h; path = ../../Source/model/jucer_ComponentDocument.h; sourceTree = SOURCE_ROOT; }; | |||
| 42CEC4195577AE91AA6CBA7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CodeGenerator.cpp; path = ../../Source/model/jucer_CodeGenerator.cpp; sourceTree = SOURCE_ROOT; }; | |||
| FE3EB6472027A398A978CBE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CodeGenerator.h; path = ../../Source/model/jucer_CodeGenerator.h; sourceTree = SOURCE_ROOT; }; | |||
| 45C80436FD5A8438D0E6BE17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Coordinate.cpp; path = ../../Source/model/jucer_Coordinate.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 420E4189E7DE25E9D0D8E5B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Coordinate.h; path = ../../Source/model/jucer_Coordinate.h; sourceTree = SOURCE_ROOT; }; | |||
| FF625CB50FB5C3536BA40604 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DrawableDocument.cpp; path = ../../Source/model/jucer_DrawableDocument.cpp; sourceTree = SOURCE_ROOT; }; | |||
| A490098DA6400B3881F336D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableDocument.h; path = ../../Source/model/jucer_DrawableDocument.h; sourceTree = SOURCE_ROOT; }; | |||
| DA142548FCADFAC50648ED3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewFileWizard.cpp; path = ../../Source/model/jucer_NewFileWizard.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 765A993B1D7A4750FE92FE21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewFileWizard.h; path = ../../Source/model/jucer_NewFileWizard.h; sourceTree = SOURCE_ROOT; }; | |||
| D47A40CB3CF6AAE14B3C7796 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Project.cpp; path = ../../Source/model/jucer_Project.cpp; sourceTree = SOURCE_ROOT; }; | |||
| FD44D5AD3D019B52485F4EB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Project.h; path = ../../Source/model/jucer_Project.h; sourceTree = SOURCE_ROOT; }; | |||
| FE9A53032395E717F54AE85B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectExporter.cpp; path = ../../Source/model/jucer_ProjectExporter.cpp; sourceTree = SOURCE_ROOT; }; | |||
| C3C2FC6810F53559CAD7B08C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExporter.h; path = ../../Source/model/jucer_ProjectExporter.h; sourceTree = SOURCE_ROOT; }; | |||
| 21B09F5FD350D587F99A48E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_Make.h; path = ../../Source/model/jucer_ProjectExport_Make.h; sourceTree = SOURCE_ROOT; }; | |||
| 67FD7B3C04807976D280F1BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_MSVC.h; path = ../../Source/model/jucer_ProjectExport_MSVC.h; sourceTree = SOURCE_ROOT; }; | |||
| FFF343958E0C9BC1E14003CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_XCode.h; path = ../../Source/model/jucer_ProjectExport_XCode.h; sourceTree = SOURCE_ROOT; }; | |||
| F1C676E178DEA8B86849CD64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectSaver.h; path = ../../Source/model/jucer_ProjectSaver.h; sourceTree = SOURCE_ROOT; }; | |||
| 0AD266A3E698D40DCD88A432 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectWizard.cpp; path = ../../Source/model/jucer_ProjectWizard.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 91C67387B525014760F514C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectWizard.h; path = ../../Source/model/jucer_ProjectWizard.h; sourceTree = SOURCE_ROOT; }; | |||
| DBE9A3BB502125C5D3433AE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ResourceFile.cpp; path = ../../Source/model/jucer_ResourceFile.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 2DEE6D9FE17874DAB301648C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ResourceFile.h; path = ../../Source/model/jucer_ResourceFile.h; sourceTree = SOURCE_ROOT; }; | |||
| BAA4B3ECAA1344B0B4052542 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentDragOperation.h; path = "../../Source/ui/Component Editor/jucer_ComponentDragOperation.h"; sourceTree = SOURCE_ROOT; }; | |||
| 1BCF8B6367CCC73AEEF03818 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CodeGenerator.cpp; path = ../../Source/model/Component/jucer_CodeGenerator.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 868978C505781890533E282C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CodeGenerator.h; path = ../../Source/model/Component/jucer_CodeGenerator.h; sourceTree = SOURCE_ROOT; }; | |||
| 829C5DA65FB46B99756428C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentDocument.cpp; path = ../../Source/model/Component/jucer_ComponentDocument.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 82F1014486AD8B0C3152FF91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentDocument.h; path = ../../Source/model/Component/jucer_ComponentDocument.h; sourceTree = SOURCE_ROOT; }; | |||
| 776686405B2531413AAA7281 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComboBox.h; path = ../../Source/model/Component/Types/jucer_ComboBox.h; sourceTree = SOURCE_ROOT; }; | |||
| D08D9DB99315F76093CF6EE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentTypeManager.cpp; path = ../../Source/model/Component/Types/jucer_ComponentTypeManager.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 03C51600B53B70BD0514254D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypeManager.h; path = ../../Source/model/Component/Types/jucer_ComponentTypeManager.h; sourceTree = SOURCE_ROOT; }; | |||
| A8A4F96A0009D7FB79B210FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypes.h; path = ../../Source/model/Component/Types/jucer_ComponentTypes.h; sourceTree = SOURCE_ROOT; }; | |||
| F05C6A0FF88238E712A23568 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GenericComponent.h; path = ../../Source/model/Component/Types/jucer_GenericComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| A424C2E4ADB30C62EB33215C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupComponent.h; path = ../../Source/model/Component/Types/jucer_GroupComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 4C0233A3D179C9D367132655 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerComponent.h; path = ../../Source/model/Component/Types/jucer_JucerComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| CC648C0D7428D809C1EF603E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Label.h; path = ../../Source/model/Component/Types/jucer_Label.h; sourceTree = SOURCE_ROOT; }; | |||
| 4CCA45827EB24DAC35225C8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Slider.h; path = ../../Source/model/Component/Types/jucer_Slider.h; sourceTree = SOURCE_ROOT; }; | |||
| 6891A060A1898C4EEE87C5F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TabbedComponent.h; path = ../../Source/model/Component/Types/jucer_TabbedComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 65BECAE9AB24EEDFBC637BF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextButton.h; path = ../../Source/model/Component/Types/jucer_TextButton.h; sourceTree = SOURCE_ROOT; }; | |||
| 9FE1B72EAF687BC6D8447106 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextEditor.h; path = ../../Source/model/Component/Types/jucer_TextEditor.h; sourceTree = SOURCE_ROOT; }; | |||
| A3909FC517682D61645E63EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ToggleButton.h; path = ../../Source/model/Component/Types/jucer_ToggleButton.h; sourceTree = SOURCE_ROOT; }; | |||
| E894E1F6D582678EE1F02763 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Viewport.h; path = ../../Source/model/Component/Types/jucer_Viewport.h; sourceTree = SOURCE_ROOT; }; | |||
| B1471E8698D193FBCF0DD13D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DrawableDocument.cpp; path = ../../Source/model/Drawable/jucer_DrawableDocument.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 739F94CA6213B43D867AB0FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableDocument.h; path = ../../Source/model/Drawable/jucer_DrawableDocument.h; sourceTree = SOURCE_ROOT; }; | |||
| 9DCB32BBD7053ACCB598CE79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewFileWizard.cpp; path = ../../Source/model/Project/jucer_NewFileWizard.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 201DF0B7B4AA3E03B1AA5144 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewFileWizard.h; path = ../../Source/model/Project/jucer_NewFileWizard.h; sourceTree = SOURCE_ROOT; }; | |||
| 4179D4C7BF616A4A3C3E11CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Project.cpp; path = ../../Source/model/Project/jucer_Project.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 20276583E130CE37FBCD801C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Project.h; path = ../../Source/model/Project/jucer_Project.h; sourceTree = SOURCE_ROOT; }; | |||
| 48A4236550741B9D05208C60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectExporter.cpp; path = ../../Source/model/Project/jucer_ProjectExporter.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 99506FC73B73E240406EAF70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExporter.h; path = ../../Source/model/Project/jucer_ProjectExporter.h; sourceTree = SOURCE_ROOT; }; | |||
| 8BCF3DDF79257BC1EF7D67E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_Make.h; path = ../../Source/model/Project/jucer_ProjectExport_Make.h; sourceTree = SOURCE_ROOT; }; | |||
| 0DA9F6324F5D4035640B61DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_MSVC.h; path = ../../Source/model/Project/jucer_ProjectExport_MSVC.h; sourceTree = SOURCE_ROOT; }; | |||
| F56963DECA44F72A4D61BCFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_XCode.h; path = ../../Source/model/Project/jucer_ProjectExport_XCode.h; sourceTree = SOURCE_ROOT; }; | |||
| 3C06302814D766140D92BAB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectSaver.h; path = ../../Source/model/Project/jucer_ProjectSaver.h; sourceTree = SOURCE_ROOT; }; | |||
| 9034F31FCBD5A2A297427537 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectWizard.cpp; path = ../../Source/model/Project/jucer_ProjectWizard.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 96F6C11FDA985E9D550CE60C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectWizard.h; path = ../../Source/model/Project/jucer_ProjectWizard.h; sourceTree = SOURCE_ROOT; }; | |||
| A6D148E4503AAD3DE6DDCD8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ResourceFile.cpp; path = ../../Source/model/Project/jucer_ResourceFile.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 5923DFBB741171B1D6EA62F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ResourceFile.h; path = ../../Source/model/Project/jucer_ResourceFile.h; sourceTree = SOURCE_ROOT; }; | |||
| 31F175F277299B3CEA857F96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_SourceCodeEditor.cpp; path = "../../Source/ui/Code Editor/jucer_SourceCodeEditor.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| B85B1F0F8634A2D7DC1F8809 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SourceCodeEditor.h; path = "../../Source/ui/Code Editor/jucer_SourceCodeEditor.h"; sourceTree = SOURCE_ROOT; }; | |||
| 3263F4099F45D6FACD28F08D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentEditor.cpp; path = "../../Source/ui/Component Editor/jucer_ComponentEditor.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 16328135EAE8536A5E2AB454 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditor.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditor.h"; sourceTree = SOURCE_ROOT; }; | |||
| 81D9A078702EFE0A32C037A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentEditorCanvas.cpp; path = "../../Source/ui/Component Editor/jucer_ComponentEditorCanvas.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 3B77C7A8D9A2386088D75CFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorCanvas.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorCanvas.h"; sourceTree = SOURCE_ROOT; }; | |||
| 7CB154C3682F8C786134A6F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorCodeView.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorCodeView.h"; sourceTree = SOURCE_ROOT; }; | |||
| B5F5AD9FC53F60610C71367C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorToolbar.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorToolbar.h"; sourceTree = SOURCE_ROOT; }; | |||
| 8CB73D6F1D0FFC4B379D1240 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorTreeView.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorTreeView.h"; sourceTree = SOURCE_ROOT; }; | |||
| 82F91CF84A296665177CB79A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DrawableEditor.cpp; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditor.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| D1776C5F3E6BB7E8C698BAD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditor.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditor.h"; sourceTree = SOURCE_ROOT; }; | |||
| F9EAFD5BC3E676BC59B326E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableObjectComponent.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| 654C1B62A2BE1FBB28BEAE72 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableTreeviewItem.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableTreeviewItem.h"; sourceTree = SOURCE_ROOT; }; | |||
| B19F19A0ED7386FAA7DD854E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditorCanvas.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditorCanvas.h"; sourceTree = SOURCE_ROOT; }; | |||
| F93FC34AEC400642196A0238 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditorToolbar.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditorToolbar.h"; sourceTree = SOURCE_ROOT; }; | |||
| F195C9668F12CC21CD2708AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditorTreeView.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditorTreeView.h"; sourceTree = SOURCE_ROOT; }; | |||
| 03E9C079FBBF727D50A2B678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_EditorCanvas.cpp; path = "../../Source/ui/Editor Base/jucer_EditorCanvas.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| E84D46270BBB219BED0446F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditorCanvas.h; path = "../../Source/ui/Editor Base/jucer_EditorCanvas.h"; sourceTree = SOURCE_ROOT; }; | |||
| BF1C973255F7BFD3965016AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditorDragOperation.h; path = "../../Source/ui/Editor Base/jucer_EditorDragOperation.h"; sourceTree = SOURCE_ROOT; }; | |||
| 064C5F11CA954DAEFA7ACD3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditorPanel.h; path = "../../Source/ui/Editor Base/jucer_EditorPanel.h"; sourceTree = SOURCE_ROOT; }; | |||
| E6BB0D9B515B50E418D98B9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CommandIDs.h; path = ../../Source/ui/jucer_CommandIDs.h; sourceTree = SOURCE_ROOT; }; | |||
| 95A4E72FC64A7338CB259DF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CoordinatePropertyComponent.h; path = ../../Source/ui/jucer_CoordinatePropertyComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 3B2C45064E85B3B631D4F921 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DocumentEditorComponent.cpp; path = ../../Source/ui/jucer_DocumentEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 156F72179BBFCD0D9804C266 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DocumentEditorComponent.h; path = ../../Source/ui/jucer_DocumentEditorComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 8F731296532276CBF2B6190D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_GroupInformationComponent.cpp; path = ../../Source/ui/jucer_GroupInformationComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| C1DB44D4E31AF6FAD8746EA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupInformationComponent.h; path = ../../Source/ui/jucer_GroupInformationComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 1E7EDE73A92751752BC90A62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ItemPreviewComponent.cpp; path = ../../Source/ui/jucer_ItemPreviewComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 637290E424EEED413A6A6D83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ItemPreviewComponent.h; path = ../../Source/ui/jucer_ItemPreviewComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 3C60CAE9481EE0113C15A0B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_JucerTreeViewBase.cpp; path = ../../Source/ui/jucer_JucerTreeViewBase.cpp; sourceTree = SOURCE_ROOT; }; | |||
| BF0218D8FC9831826CD2F670 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerTreeViewBase.h; path = ../../Source/ui/jucer_JucerTreeViewBase.h; sourceTree = SOURCE_ROOT; }; | |||
| 17F5B1F00F15DB37EA4A4AEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainWindow.cpp; path = ../../Source/ui/jucer_MainWindow.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 65C0C87A85D4371BDE1C4347 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MainWindow.h; path = ../../Source/ui/jucer_MainWindow.h; sourceTree = SOURCE_ROOT; }; | |||
| 118A505BA7079B3C8C9B858B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_OpenDocumentManager.cpp; path = ../../Source/ui/jucer_OpenDocumentManager.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 5377D74DB551C2B83F73FAE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_OpenDocumentManager.h; path = ../../Source/ui/jucer_OpenDocumentManager.h; sourceTree = SOURCE_ROOT; }; | |||
| 487D3D6777F8C3E26C0D5887 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectContentComponent.cpp; path = ../../Source/ui/jucer_ProjectContentComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 442910162B36728054AACDFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = ../../Source/ui/jucer_ProjectContentComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 9170F22B59096F151A9FFFB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectInformationComponent.cpp; path = ../../Source/ui/jucer_ProjectInformationComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 097BD8BB61EE09C908A8C99D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectInformationComponent.h; path = ../../Source/ui/jucer_ProjectInformationComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| AEE4E1F518A91ABB386CFD9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectTreeViewBase.cpp; path = ../../Source/ui/jucer_ProjectTreeViewBase.cpp; sourceTree = SOURCE_ROOT; }; | |||
| F400D65DAD8A93736A7960CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectTreeViewBase.h; path = ../../Source/ui/jucer_ProjectTreeViewBase.h; sourceTree = SOURCE_ROOT; }; | |||
| E55B34E6694D69E3DBB107D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_SourceCodeEditor.cpp; path = ../../Source/ui/jucer_SourceCodeEditor.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 8A3A8D57685177B2F0D52C17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SourceCodeEditor.h; path = ../../Source/ui/jucer_SourceCodeEditor.h; sourceTree = SOURCE_ROOT; }; | |||
| B4439D672F2977238755E1E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_TreeViewTypes.cpp; path = ../../Source/ui/jucer_TreeViewTypes.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 4BF0300CA427D2D308542534 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TreeViewTypes.h; path = ../../Source/ui/jucer_TreeViewTypes.h; sourceTree = SOURCE_ROOT; }; | |||
| 63C3715BB513E5F84B1159AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_GroupInformationComponent.cpp; path = "../../Source/ui/Project Editor/jucer_GroupInformationComponent.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 9605019A62439E2D81587677 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupInformationComponent.h; path = "../../Source/ui/Project Editor/jucer_GroupInformationComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| 3E8A127EE612399B57B82B4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ItemPreviewComponent.cpp; path = "../../Source/ui/Project Editor/jucer_ItemPreviewComponent.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| DEF2E2C35BD8A4EBC1127F69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ItemPreviewComponent.h; path = "../../Source/ui/Project Editor/jucer_ItemPreviewComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| 742E74D389224CCB863822AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectContentComponent.cpp; path = "../../Source/ui/Project Editor/jucer_ProjectContentComponent.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 232AEDC27972ED69C3373080 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = "../../Source/ui/Project Editor/jucer_ProjectContentComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| E4BED7589BF4391ECB067DBC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectInformationComponent.cpp; path = "../../Source/ui/Project Editor/jucer_ProjectInformationComponent.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 14B2027257EE36ABD0D0CEDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectInformationComponent.h; path = "../../Source/ui/Project Editor/jucer_ProjectInformationComponent.h"; sourceTree = SOURCE_ROOT; }; | |||
| 1FDE55685608689765ADC578 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectTreeViewBase.cpp; path = "../../Source/ui/Project Editor/jucer_ProjectTreeViewBase.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 07234413CA03F3C304B63188 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectTreeViewBase.h; path = "../../Source/ui/Project Editor/jucer_ProjectTreeViewBase.h"; sourceTree = SOURCE_ROOT; }; | |||
| 939E2A7946081DB4D21B89B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_TreeViewTypes.cpp; path = "../../Source/ui/Project Editor/jucer_TreeViewTypes.cpp"; sourceTree = SOURCE_ROOT; }; | |||
| 119004FCF601190AC8929BBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TreeViewTypes.h; path = "../../Source/ui/Project Editor/jucer_TreeViewTypes.h"; sourceTree = SOURCE_ROOT; }; | |||
| AAF3C58696944A256CA61730 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ColourEditorComponent.h; path = ../../Source/utility/jucer_ColourEditorComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 9736236B5C4D6A16FC7E03AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Colours.h; path = ../../Source/utility/jucer_Colours.h; sourceTree = SOURCE_ROOT; }; | |||
| C7ADB43F83A83FFC08921A12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Coordinate.cpp; path = ../../Source/utility/jucer_Coordinate.cpp; sourceTree = SOURCE_ROOT; }; | |||
| EFA0636FB8ABA3377AB6C6F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Coordinate.h; path = ../../Source/utility/jucer_Coordinate.h; sourceTree = SOURCE_ROOT; }; | |||
| CC9A3046B8B9FCDFE2092F51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CoordinatePropertyComponent.h; path = ../../Source/utility/jucer_CoordinatePropertyComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 848F9EFCBB691000A4B32346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MarkerListBase.h; path = ../../Source/utility/jucer_MarkerListBase.h; sourceTree = SOURCE_ROOT; }; | |||
| F99858EE1CD3B23057B8BEBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_RelativePath.h; path = ../../Source/utility/jucer_RelativePath.h; sourceTree = SOURCE_ROOT; }; | |||
| 7A1CD936BD306A6E0BEFB046 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_StoredSettings.cpp; path = ../../Source/utility/jucer_StoredSettings.cpp; sourceTree = SOURCE_ROOT; }; | |||
| E99413C9561A66310DAD5EEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_StoredSettings.h; path = ../../Source/utility/jucer_StoredSettings.h; sourceTree = SOURCE_ROOT; }; | |||
| @@ -166,50 +170,55 @@ | |||
| DD6476FF0F8BE833CD54C01F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = SOURCE_ROOT; }; | |||
| 268B4FFB1C675B679138545F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = SOURCE_ROOT; }; | |||
| 60A217F62952DE8A752BD79F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = SOURCE_ROOT; }; | |||
| D3D6EC2C17524688F2E803EB = { isa = PBXGroup; children = ( | |||
| 82A1EC47692975C7031B3973, | |||
| 4F23FF649E7BA3A0F737E3BE, | |||
| 6FD54B7E8992FD692BAA0DC6, | |||
| 926FC04F4EAF24C7C4671207, | |||
| C6263909812DBE995167932B, | |||
| 6B5504F7274B11DFAD3B2E26, | |||
| 133385B65A02DF50291B222F, | |||
| C64A89EA5C3F0A701F9EBA79, | |||
| 40716207B98461E05DC46F14, | |||
| 4A22DE9DF590115F174CA70E, | |||
| E18C99BDD4EF3DFD767F3770, | |||
| 1BBF86F1D833DAD4A1503C82, | |||
| A6FAA90B494DCD7CA5911196, | |||
| 03AD2BF6C80C6AF47BBDB7E9 ); name = "Component Types"; sourceTree = "<group>"; }; | |||
| 7C95A5CDB1B24D227D92749E = { isa = PBXGroup; children = ( | |||
| 776686405B2531413AAA7281, | |||
| D08D9DB99315F76093CF6EE6, | |||
| 03C51600B53B70BD0514254D, | |||
| A8A4F96A0009D7FB79B210FC, | |||
| F05C6A0FF88238E712A23568, | |||
| A424C2E4ADB30C62EB33215C, | |||
| 4C0233A3D179C9D367132655, | |||
| CC648C0D7428D809C1EF603E, | |||
| 4CCA45827EB24DAC35225C8B, | |||
| 6891A060A1898C4EEE87C5F9, | |||
| 65BECAE9AB24EEDFBC637BF4, | |||
| 9FE1B72EAF687BC6D8447106, | |||
| A3909FC517682D61645E63EF, | |||
| E894E1F6D582678EE1F02763 ); name = Types; sourceTree = "<group>"; }; | |||
| E874A7599C1FEEE538F2DFF2 = { isa = PBXGroup; children = ( | |||
| 1BCF8B6367CCC73AEEF03818, | |||
| 868978C505781890533E282C, | |||
| 829C5DA65FB46B99756428C5, | |||
| 82F1014486AD8B0C3152FF91, | |||
| 7C95A5CDB1B24D227D92749E ); name = Component; sourceTree = "<group>"; }; | |||
| E70E3BE796E91EA86CFE10FE = { isa = PBXGroup; children = ( | |||
| B1471E8698D193FBCF0DD13D, | |||
| 739F94CA6213B43D867AB0FD ); name = Drawable; sourceTree = "<group>"; }; | |||
| ADA17383E5554BCDF567AACC = { isa = PBXGroup; children = ( | |||
| 9DCB32BBD7053ACCB598CE79, | |||
| 201DF0B7B4AA3E03B1AA5144, | |||
| 4179D4C7BF616A4A3C3E11CA, | |||
| 20276583E130CE37FBCD801C, | |||
| 48A4236550741B9D05208C60, | |||
| 99506FC73B73E240406EAF70, | |||
| 8BCF3DDF79257BC1EF7D67E0, | |||
| 0DA9F6324F5D4035640B61DE, | |||
| F56963DECA44F72A4D61BCFE, | |||
| 3C06302814D766140D92BAB8, | |||
| 9034F31FCBD5A2A297427537, | |||
| 96F6C11FDA985E9D550CE60C, | |||
| A6D148E4503AAD3DE6DDCD8B, | |||
| 5923DFBB741171B1D6EA62F4 ); name = Project; sourceTree = "<group>"; }; | |||
| BF6238C9155879B9A9C47213 = { isa = PBXGroup; children = ( | |||
| D3D6EC2C17524688F2E803EB, | |||
| 2D6D6985B452EA0B67A18914, | |||
| E6CC3A04349F6B227FDAB26F, | |||
| 42CEC4195577AE91AA6CBA7F, | |||
| FE3EB6472027A398A978CBE4, | |||
| 45C80436FD5A8438D0E6BE17, | |||
| 420E4189E7DE25E9D0D8E5B8, | |||
| FF625CB50FB5C3536BA40604, | |||
| A490098DA6400B3881F336D0, | |||
| DA142548FCADFAC50648ED3C, | |||
| 765A993B1D7A4750FE92FE21, | |||
| D47A40CB3CF6AAE14B3C7796, | |||
| FD44D5AD3D019B52485F4EB1, | |||
| FE9A53032395E717F54AE85B, | |||
| C3C2FC6810F53559CAD7B08C, | |||
| 21B09F5FD350D587F99A48E3, | |||
| 67FD7B3C04807976D280F1BA, | |||
| FFF343958E0C9BC1E14003CE, | |||
| F1C676E178DEA8B86849CD64, | |||
| 0AD266A3E698D40DCD88A432, | |||
| 91C67387B525014760F514C2, | |||
| DBE9A3BB502125C5D3433AE7, | |||
| 2DEE6D9FE17874DAB301648C ); name = Model; sourceTree = "<group>"; }; | |||
| E874A7599C1FEEE538F2DFF2, | |||
| E70E3BE796E91EA86CFE10FE, | |||
| ADA17383E5554BCDF567AACC ); name = Model; sourceTree = "<group>"; }; | |||
| 336D07CB9ED81D2A985A8543 = { isa = PBXGroup; children = ( | |||
| 31F175F277299B3CEA857F96, | |||
| B85B1F0F8634A2D7DC1F8809 ); name = "Code Editor"; sourceTree = "<group>"; }; | |||
| 3A0BE83502CB509D623C2C07 = { isa = PBXGroup; children = ( | |||
| BAA4B3ECAA1344B0B4052542, | |||
| 3263F4099F45D6FACD28F08D, | |||
| 16328135EAE8536A5E2AB454, | |||
| 81D9A078702EFE0A32C037A1, | |||
| 3B77C7A8D9A2386088D75CFE, | |||
| 7CB154C3682F8C786134A6F3, | |||
| B5F5AD9FC53F60610C71367C, | |||
| @@ -217,38 +226,49 @@ | |||
| E6053BD673F80E900DDA3593 = { isa = PBXGroup; children = ( | |||
| 82F91CF84A296665177CB79A, | |||
| D1776C5F3E6BB7E8C698BAD6, | |||
| F9EAFD5BC3E676BC59B326E0, | |||
| 654C1B62A2BE1FBB28BEAE72 ); name = "Drawable Editor"; sourceTree = "<group>"; }; | |||
| B19F19A0ED7386FAA7DD854E, | |||
| F93FC34AEC400642196A0238, | |||
| F195C9668F12CC21CD2708AA ); name = "Drawable Editor"; sourceTree = "<group>"; }; | |||
| F4B31EE979DF2BE5AA276EAF = { isa = PBXGroup; children = ( | |||
| 03E9C079FBBF727D50A2B678, | |||
| E84D46270BBB219BED0446F7, | |||
| BF1C973255F7BFD3965016AE, | |||
| 064C5F11CA954DAEFA7ACD3A ); name = "Editor Base"; sourceTree = "<group>"; }; | |||
| 73551B9BCDF3BAC06FECEAF8 = { isa = PBXGroup; children = ( | |||
| 63C3715BB513E5F84B1159AB, | |||
| 9605019A62439E2D81587677, | |||
| 3E8A127EE612399B57B82B4C, | |||
| DEF2E2C35BD8A4EBC1127F69, | |||
| 742E74D389224CCB863822AD, | |||
| 232AEDC27972ED69C3373080, | |||
| E4BED7589BF4391ECB067DBC, | |||
| 14B2027257EE36ABD0D0CEDB, | |||
| 1FDE55685608689765ADC578, | |||
| 07234413CA03F3C304B63188, | |||
| 939E2A7946081DB4D21B89B6, | |||
| 119004FCF601190AC8929BBD ); name = "Project Editor"; sourceTree = "<group>"; }; | |||
| 63A4428C116D97D7C5C05DC8 = { isa = PBXGroup; children = ( | |||
| 336D07CB9ED81D2A985A8543, | |||
| 3A0BE83502CB509D623C2C07, | |||
| E6053BD673F80E900DDA3593, | |||
| F4B31EE979DF2BE5AA276EAF, | |||
| E6BB0D9B515B50E418D98B9C, | |||
| 95A4E72FC64A7338CB259DF7, | |||
| 3B2C45064E85B3B631D4F921, | |||
| 156F72179BBFCD0D9804C266, | |||
| 8F731296532276CBF2B6190D, | |||
| C1DB44D4E31AF6FAD8746EA6, | |||
| 1E7EDE73A92751752BC90A62, | |||
| 637290E424EEED413A6A6D83, | |||
| 3C60CAE9481EE0113C15A0B9, | |||
| BF0218D8FC9831826CD2F670, | |||
| 17F5B1F00F15DB37EA4A4AEA, | |||
| 65C0C87A85D4371BDE1C4347, | |||
| 118A505BA7079B3C8C9B858B, | |||
| 5377D74DB551C2B83F73FAE0, | |||
| 487D3D6777F8C3E26C0D5887, | |||
| 442910162B36728054AACDFC, | |||
| 9170F22B59096F151A9FFFB3, | |||
| 097BD8BB61EE09C908A8C99D, | |||
| AEE4E1F518A91ABB386CFD9E, | |||
| F400D65DAD8A93736A7960CC, | |||
| E55B34E6694D69E3DBB107D1, | |||
| 8A3A8D57685177B2F0D52C17, | |||
| B4439D672F2977238755E1E2, | |||
| 4BF0300CA427D2D308542534 ); name = UI; sourceTree = "<group>"; }; | |||
| 73551B9BCDF3BAC06FECEAF8 ); name = UI; sourceTree = "<group>"; }; | |||
| 14B5B6D3D07644058F0F526F = { isa = PBXGroup; children = ( | |||
| AAF3C58696944A256CA61730, | |||
| 9736236B5C4D6A16FC7E03AC, | |||
| C7ADB43F83A83FFC08921A12, | |||
| EFA0636FB8ABA3377AB6C6F4, | |||
| CC9A3046B8B9FCDFE2092F51, | |||
| 848F9EFCBB691000A4B32346, | |||
| F99858EE1CD3B23057B8BEBD, | |||
| 7A1CD936BD306A6E0BEFB046, | |||
| E99413C9561A66310DAD5EEB, | |||
| @@ -372,30 +392,30 @@ | |||
| 673FACB8969ADED17ACEFF7C ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; | |||
| 87CCE4CB1FAB40B6F21DEACE = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; | |||
| 5362E03ADF975A126C1F2F7B = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( | |||
| 52D75B8B0F52DD4F37A4B1C0, | |||
| CD4226951C3F7FE19CF8A7CE, | |||
| 8E859D542404B684D5E1545F, | |||
| 1DF9688E29753A0459E6C32A, | |||
| 1174D3512AF8207950094C56, | |||
| 087CCE9E7146F1EC4F241254, | |||
| E9935BFB0EFA8CCCD41DC08E, | |||
| 60CDC1358E84801B6526E434, | |||
| EEC6FC8E546C88C825411DB2, | |||
| B2B821DE12F1679A3ADA597A, | |||
| A7EB756F566FB773ABE3DFA9, | |||
| 061C981D0E9FB70DE5A3D32C, | |||
| FEDBCD721085272D356BBAEB, | |||
| 268807D7091702D29033CC27, | |||
| 06838545183964D8C1E60530, | |||
| 048D33BDE7413EFE05D09901, | |||
| 9DA1913A62297D7111E0A6C9, | |||
| 44C2E5705EEA4F01309D8960, | |||
| 7C9FFFC0B129F5C3FAEE13E9, | |||
| 33E1A095D656AF109DD54170, | |||
| D706C3B5016318D85FE452C2, | |||
| CDB5102BEFD7C18BD28709F3, | |||
| E43D00B370F289420379B759, | |||
| EFFCA85EFB4F06F1BEB9AB97, | |||
| 944CE0EADAD951F48EC77071, | |||
| 4E8860E0F8680956A6F5B493, | |||
| 288F5E7A2EC305BB4D8D73D1, | |||
| 2417927E323BFE201D5985B9, | |||
| A1CB18029E09A66E192D9A29, | |||
| F8C762CCE16669F76D2209B9, | |||
| 4FF75A3C7DCB9FD245320FE6, | |||
| A70AED2E35B809981470A547, | |||
| 4D6C7380B8BB0BA9470C146C, | |||
| 438FED16CFDB36A4BE1F5F35, | |||
| 33A4BAAD7A79BA63E78CB503, | |||
| 496F7F18FCBE1E212F62E328, | |||
| BFFA4F695DDFEA8EE6CE7241, | |||
| C74E7F0701EF10141D5C1D9D, | |||
| 54CF219EADAD8E6DC7D20A8E, | |||
| 984444E3B2947675DC7D65DA, | |||
| 58BF60E87F9A8EDCACC5D1AE, | |||
| 5BF87265418D736250283182, | |||
| DDAB225ABE572196882C3524, | |||
| FA8C72364CDFD2B76F16C0F1, | |||
| 6B6B0EBBE899B0ACDCAD92F5, | |||
| @@ -133,51 +133,57 @@ | |||
| <Files> | |||
| <Filter Name="The Jucer"> | |||
| <Filter Name="Model"> | |||
| <Filter Name="Component Types"> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypes.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComboBox.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_GenericComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_GroupComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_JucerComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_Label.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_Slider.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_TabbedComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_TextButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_TextEditor.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ToggleButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_Viewport.h"/> | |||
| <Filter Name="Component"> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.h"/> | |||
| <Filter Name="Types"> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComboBox.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypes.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_GenericComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_GroupComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_JucerComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_Label.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_Slider.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_TabbedComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_TextButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_TextEditor.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ToggleButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_Viewport.h"/> | |||
| </Filter> | |||
| </Filter> | |||
| <Filter Name="Drawable"> | |||
| <File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.h"/> | |||
| </Filter> | |||
| <Filter Name="Project"> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_Project.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_Project.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_Make.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_MSVC.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_XCode.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectSaver.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.h"/> | |||
| </Filter> | |||
| <File RelativePath="..\..\Source\model\jucer_ComponentDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ComponentDocument.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_CodeGenerator.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_CodeGenerator.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Coordinate.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Coordinate.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_DrawableDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_DrawableDocument.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_NewFileWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_NewFileWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Project.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Project.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExporter.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExporter.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExport_Make.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExport_MSVC.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExport_XCode.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectSaver.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ResourceFile.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ResourceFile.h"/> | |||
| </Filter> | |||
| <Filter Name="UI"> | |||
| <Filter Name="Code Editor"> | |||
| <File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.h"/> | |||
| </Filter> | |||
| <Filter Name="Component Editor"> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentDragOperation.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/> | |||
| @@ -186,37 +192,47 @@ | |||
| <Filter Name="Drawable Editor"> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableObjectComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableTreeviewItem.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorCanvas.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorToolbar.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorTreeView.h"/> | |||
| </Filter> | |||
| <Filter Name="Editor Base"> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.h"/> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorDragOperation.h"/> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorPanel.h"/> | |||
| </Filter> | |||
| <File RelativePath="..\..\Source\ui\jucer_CommandIDs.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_CoordinatePropertyComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.h"/> | |||
| <Filter Name="Project Editor"> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.h"/> | |||
| </Filter> | |||
| </Filter> | |||
| <Filter Name="Utility"> | |||
| <File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_Colours.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_Coordinate.cpp"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_Coordinate.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_CoordinatePropertyComponent.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_MarkerListBase.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_RelativePath.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/> | |||
| @@ -133,51 +133,57 @@ | |||
| <Files> | |||
| <Filter Name="The Jucer"> | |||
| <Filter Name="Model"> | |||
| <Filter Name="Component Types"> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypes.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ComboBox.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_GenericComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_GroupComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_JucerComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_Label.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_Slider.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_TabbedComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_TextButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_TextEditor.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_ToggleButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component Types\jucer_Viewport.h"/> | |||
| <Filter Name="Component"> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.h"/> | |||
| <Filter Name="Types"> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComboBox.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypes.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_GenericComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_GroupComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_JucerComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_Label.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_Slider.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_TabbedComponent.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_TextButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_TextEditor.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_ToggleButton.h"/> | |||
| <File RelativePath="..\..\Source\model\Component\Types\jucer_Viewport.h"/> | |||
| </Filter> | |||
| </Filter> | |||
| <Filter Name="Drawable"> | |||
| <File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.h"/> | |||
| </Filter> | |||
| <Filter Name="Project"> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_Project.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_Project.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_Make.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_MSVC.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_XCode.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectSaver.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.cpp"/> | |||
| <File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.h"/> | |||
| </Filter> | |||
| <File RelativePath="..\..\Source\model\jucer_ComponentDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ComponentDocument.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_CodeGenerator.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_CodeGenerator.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Coordinate.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Coordinate.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_DrawableDocument.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_DrawableDocument.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_NewFileWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_NewFileWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Project.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_Project.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExporter.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExporter.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExport_Make.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExport_MSVC.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectExport_XCode.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectSaver.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectWizard.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ProjectWizard.h"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ResourceFile.cpp"/> | |||
| <File RelativePath="..\..\Source\model\jucer_ResourceFile.h"/> | |||
| </Filter> | |||
| <Filter Name="UI"> | |||
| <Filter Name="Code Editor"> | |||
| <File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.h"/> | |||
| </Filter> | |||
| <Filter Name="Component Editor"> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentDragOperation.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/> | |||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/> | |||
| @@ -186,37 +192,47 @@ | |||
| <Filter Name="Drawable Editor"> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableObjectComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableTreeviewItem.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorCanvas.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorToolbar.h"/> | |||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorTreeView.h"/> | |||
| </Filter> | |||
| <Filter Name="Editor Base"> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.h"/> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorDragOperation.h"/> | |||
| <File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorPanel.h"/> | |||
| </Filter> | |||
| <File RelativePath="..\..\Source\ui\jucer_CommandIDs.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_CoordinatePropertyComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.h"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.h"/> | |||
| <Filter Name="Project Editor"> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.h"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.cpp"/> | |||
| <File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.h"/> | |||
| </Filter> | |||
| </Filter> | |||
| <Filter Name="Utility"> | |||
| <File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_Colours.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_Coordinate.cpp"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_Coordinate.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_CoordinatePropertyComponent.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_MarkerListBase.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_RelativePath.h"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/> | |||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/> | |||
| @@ -27,91 +27,95 @@ | |||
| </CONFIGURATIONS> | |||
| <MAINGROUP name="The Jucer" id="NhrJq66R"> | |||
| <GROUP id="EmpOiUg6" name="Model"> | |||
| <GROUP id="7IAOlGP0H" name="Component Types"> | |||
| <FILE id="dhwVkC0LQ" name="jucer_ComponentTypeManager.cpp" compile="1" | |||
| resource="0" file="Source/model/Component Types/jucer_ComponentTypeManager.cpp"/> | |||
| <FILE id="rSuW9uAYG" name="jucer_ComponentTypeManager.h" compile="0" | |||
| resource="0" file="Source/model/Component Types/jucer_ComponentTypeManager.h"/> | |||
| <FILE id="X1JJNqL9d" name="jucer_ComponentTypes.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_ComponentTypes.h"/> | |||
| <FILE id="0kW52xWY0" name="jucer_ComboBox.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_ComboBox.h"/> | |||
| <FILE id="IgbLRcOlP" name="jucer_GenericComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_GenericComponent.h"/> | |||
| <FILE id="dO5A44NtK" name="jucer_GroupComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_GroupComponent.h"/> | |||
| <FILE id="5ooKsX1Oy" name="jucer_JucerComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_JucerComponent.h"/> | |||
| <FILE id="J1dHwtOob" name="jucer_Label.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_Label.h"/> | |||
| <FILE id="K2f4ViI8f" name="jucer_Slider.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_Slider.h"/> | |||
| <FILE id="Yq56kjAjr" name="jucer_TabbedComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_TabbedComponent.h"/> | |||
| <FILE id="lO2yuwiGR" name="jucer_TextButton.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_TextButton.h"/> | |||
| <FILE id="9kpY6Dy8E" name="jucer_TextEditor.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_TextEditor.h"/> | |||
| <FILE id="EOwXntvc" name="jucer_ToggleButton.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_ToggleButton.h"/> | |||
| <FILE id="dnB5Epzjx" name="jucer_Viewport.h" compile="0" resource="0" | |||
| file="Source/model/Component Types/jucer_Viewport.h"/> | |||
| <GROUP id="r9Z0VgmVt" name="Component"> | |||
| <FILE id="cAfGal6GQ" name="jucer_CodeGenerator.cpp" compile="1" resource="0" | |||
| file="Source/model/Component/jucer_CodeGenerator.cpp"/> | |||
| <FILE id="Qibg2oEYn" name="jucer_CodeGenerator.h" compile="0" resource="0" | |||
| file="Source/model/Component/jucer_CodeGenerator.h"/> | |||
| <FILE id="9RinhqJ0h" name="jucer_ComponentDocument.cpp" compile="1" | |||
| resource="0" file="Source/model/Component/jucer_ComponentDocument.cpp"/> | |||
| <FILE id="1i1F8pBgt" name="jucer_ComponentDocument.h" compile="0" resource="0" | |||
| file="Source/model/Component/jucer_ComponentDocument.h"/> | |||
| <GROUP id="fX4b21TeV" name="Types"> | |||
| <FILE id="Vy9PjpAR5" name="jucer_ComboBox.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_ComboBox.h"/> | |||
| <FILE id="ReDOix8hj" name="jucer_ComponentTypeManager.cpp" compile="1" | |||
| resource="0" file="Source/model/Component/Types/jucer_ComponentTypeManager.cpp"/> | |||
| <FILE id="u1zS2mcPU" name="jucer_ComponentTypeManager.h" compile="0" | |||
| resource="0" file="Source/model/Component/Types/jucer_ComponentTypeManager.h"/> | |||
| <FILE id="qqDkB89pF" name="jucer_ComponentTypes.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_ComponentTypes.h"/> | |||
| <FILE id="oiNs8GZo" name="jucer_GenericComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_GenericComponent.h"/> | |||
| <FILE id="lmrNPax3E" name="jucer_GroupComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_GroupComponent.h"/> | |||
| <FILE id="fUXMrXWsn" name="jucer_JucerComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_JucerComponent.h"/> | |||
| <FILE id="FpznvfhuR" name="jucer_Label.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_Label.h"/> | |||
| <FILE id="UN9mKr0Ex" name="jucer_Slider.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_Slider.h"/> | |||
| <FILE id="QxRfjFUjL" name="jucer_TabbedComponent.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_TabbedComponent.h"/> | |||
| <FILE id="Cb8vXkAtU" name="jucer_TextButton.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_TextButton.h"/> | |||
| <FILE id="Rc1C9l1Lk" name="jucer_TextEditor.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_TextEditor.h"/> | |||
| <FILE id="BwDu2gfjb" name="jucer_ToggleButton.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_ToggleButton.h"/> | |||
| <FILE id="FEcXNQqY" name="jucer_Viewport.h" compile="0" resource="0" | |||
| file="Source/model/Component/Types/jucer_Viewport.h"/> | |||
| </GROUP> | |||
| </GROUP> | |||
| <GROUP id="HpUkRSarI" name="Drawable"> | |||
| <FILE id="ncwNLhJd" name="jucer_DrawableDocument.cpp" compile="1" resource="0" | |||
| file="Source/model/Drawable/jucer_DrawableDocument.cpp"/> | |||
| <FILE id="qMcrWuCal" name="jucer_DrawableDocument.h" compile="0" resource="0" | |||
| file="Source/model/Drawable/jucer_DrawableDocument.h"/> | |||
| </GROUP> | |||
| <GROUP id="na25KSPIj" name="Project"> | |||
| <FILE id="jqL1mb9xp" name="jucer_NewFileWizard.cpp" compile="1" resource="0" | |||
| file="Source/model/Project/jucer_NewFileWizard.cpp"/> | |||
| <FILE id="DTXE0P1Rs" name="jucer_NewFileWizard.h" compile="0" resource="0" | |||
| file="Source/model/Project/jucer_NewFileWizard.h"/> | |||
| <FILE id="7j52T5XDL" name="jucer_Project.cpp" compile="1" resource="0" | |||
| file="Source/model/Project/jucer_Project.cpp"/> | |||
| <FILE id="EO4eoN9a" name="jucer_Project.h" compile="0" resource="0" | |||
| file="Source/model/Project/jucer_Project.h"/> | |||
| <FILE id="SiRIHP3Ky" name="jucer_ProjectExporter.cpp" compile="1" resource="0" | |||
| file="Source/model/Project/jucer_ProjectExporter.cpp"/> | |||
| <FILE id="2h3NRNSSp" name="jucer_ProjectExporter.h" compile="0" resource="0" | |||
| file="Source/model/Project/jucer_ProjectExporter.h"/> | |||
| <FILE id="uqrOod35R" name="jucer_ProjectExport_Make.h" compile="0" | |||
| resource="0" file="Source/model/Project/jucer_ProjectExport_Make.h"/> | |||
| <FILE id="8phHwnBgr" name="jucer_ProjectExport_MSVC.h" compile="0" | |||
| resource="0" file="Source/model/Project/jucer_ProjectExport_MSVC.h"/> | |||
| <FILE id="HPljCj6zE" name="jucer_ProjectExport_XCode.h" compile="0" | |||
| resource="0" file="Source/model/Project/jucer_ProjectExport_XCode.h"/> | |||
| <FILE id="AtzLEpc" name="jucer_ProjectSaver.h" compile="0" resource="0" | |||
| file="Source/model/Project/jucer_ProjectSaver.h"/> | |||
| <FILE id="NvomVFC4G" name="jucer_ProjectWizard.cpp" compile="1" resource="0" | |||
| file="Source/model/Project/jucer_ProjectWizard.cpp"/> | |||
| <FILE id="k0RyM7mX3" name="jucer_ProjectWizard.h" compile="0" resource="0" | |||
| file="Source/model/Project/jucer_ProjectWizard.h"/> | |||
| <FILE id="TfPOOMLpj" name="jucer_ResourceFile.cpp" compile="1" resource="0" | |||
| file="Source/model/Project/jucer_ResourceFile.cpp"/> | |||
| <FILE id="RXpYUNLSg" name="jucer_ResourceFile.h" compile="0" resource="0" | |||
| file="Source/model/Project/jucer_ResourceFile.h"/> | |||
| </GROUP> | |||
| <FILE id="e6IQOUwvq" name="jucer_ComponentDocument.cpp" compile="1" | |||
| resource="0" file="Source/model/jucer_ComponentDocument.cpp"/> | |||
| <FILE id="u5n6JTb4z" name="jucer_ComponentDocument.h" compile="0" resource="0" | |||
| file="Source/model/jucer_ComponentDocument.h"/> | |||
| <FILE id="YJF79TlHr" name="jucer_CodeGenerator.cpp" compile="1" resource="0" | |||
| file="Source/model/jucer_CodeGenerator.cpp"/> | |||
| <FILE id="Wr2TBw8wQ" name="jucer_CodeGenerator.h" compile="0" resource="0" | |||
| file="Source/model/jucer_CodeGenerator.h"/> | |||
| <FILE id="lxuyJGZcw" name="jucer_Coordinate.cpp" compile="1" resource="0" | |||
| file="Source/model/jucer_Coordinate.cpp"/> | |||
| <FILE id="CyKbwNlwe" name="jucer_Coordinate.h" compile="0" resource="0" | |||
| file="Source/model/jucer_Coordinate.h"/> | |||
| <FILE id="XxIww5OtT" name="jucer_DrawableDocument.cpp" compile="1" | |||
| resource="0" file="Source/model/jucer_DrawableDocument.cpp"/> | |||
| <FILE id="lbB698APl" name="jucer_DrawableDocument.h" compile="0" resource="0" | |||
| file="Source/model/jucer_DrawableDocument.h"/> | |||
| <FILE id="W6edslpwV" name="jucer_NewFileWizard.cpp" compile="1" resource="0" | |||
| file="Source/model/jucer_NewFileWizard.cpp"/> | |||
| <FILE id="ZdXfjs3cm" name="jucer_NewFileWizard.h" compile="0" resource="0" | |||
| file="Source/model/jucer_NewFileWizard.h"/> | |||
| <FILE id="1xhl6AMel" name="jucer_Project.cpp" compile="1" resource="0" | |||
| file="Source/model/jucer_Project.cpp"/> | |||
| <FILE id="xFKtjM5IY" name="jucer_Project.h" compile="0" resource="0" | |||
| file="Source/model/jucer_Project.h"/> | |||
| <FILE id="I25pufbxN" name="jucer_ProjectExporter.cpp" compile="1" resource="0" | |||
| file="Source/model/jucer_ProjectExporter.cpp"/> | |||
| <FILE id="tlrgROke9" name="jucer_ProjectExporter.h" compile="0" resource="0" | |||
| file="Source/model/jucer_ProjectExporter.h"/> | |||
| <FILE id="CuHVcKsZ1" name="jucer_ProjectExport_Make.h" compile="0" | |||
| resource="0" file="Source/model/jucer_ProjectExport_Make.h"/> | |||
| <FILE id="siqostdgr" name="jucer_ProjectExport_MSVC.h" compile="0" | |||
| resource="0" file="Source/model/jucer_ProjectExport_MSVC.h"/> | |||
| <FILE id="TNs5meM1l" name="jucer_ProjectExport_XCode.h" compile="0" | |||
| resource="0" file="Source/model/jucer_ProjectExport_XCode.h"/> | |||
| <FILE id="8gWlotR2u" name="jucer_ProjectSaver.h" compile="0" resource="0" | |||
| file="Source/model/jucer_ProjectSaver.h"/> | |||
| <FILE id="5UqcXDyrq" name="jucer_ProjectWizard.cpp" compile="1" resource="0" | |||
| file="Source/model/jucer_ProjectWizard.cpp"/> | |||
| <FILE id="CblaK2RkX" name="jucer_ProjectWizard.h" compile="0" resource="0" | |||
| file="Source/model/jucer_ProjectWizard.h"/> | |||
| <FILE id="EUHSwOdbz" name="jucer_ResourceFile.cpp" compile="1" resource="0" | |||
| file="Source/model/jucer_ResourceFile.cpp"/> | |||
| <FILE id="M7WhM7B9G" name="jucer_ResourceFile.h" compile="0" resource="0" | |||
| file="Source/model/jucer_ResourceFile.h"/> | |||
| </GROUP> | |||
| <GROUP id="8J0PD9iW5" name="UI"> | |||
| <GROUP id="Aq4VMz9t" name="Code Editor"> | |||
| <FILE id="yZzVX2yqj" name="jucer_SourceCodeEditor.cpp" compile="1" | |||
| resource="0" file="Source/ui/Code Editor/jucer_SourceCodeEditor.cpp"/> | |||
| <FILE id="aZC2eXVL" name="jucer_SourceCodeEditor.h" compile="0" resource="0" | |||
| file="Source/ui/Code Editor/jucer_SourceCodeEditor.h"/> | |||
| </GROUP> | |||
| <GROUP id="d2joUoRvF" name="Component Editor"> | |||
| <FILE id="m6WsEDek9" name="jucer_ComponentDragOperation.h" compile="0" | |||
| resource="0" file="Source/ui/Component Editor/jucer_ComponentDragOperation.h"/> | |||
| <FILE id="Q48V5uBKu" name="jucer_ComponentEditor.cpp" compile="1" resource="0" | |||
| file="Source/ui/Component Editor/jucer_ComponentEditor.cpp"/> | |||
| <FILE id="B1zNCvltV" name="jucer_ComponentEditor.h" compile="0" resource="0" | |||
| file="Source/ui/Component Editor/jucer_ComponentEditor.h"/> | |||
| <FILE id="3Rd2cdG1r" name="jucer_ComponentEditorCanvas.cpp" compile="1" | |||
| resource="0" file="Source/ui/Component Editor/jucer_ComponentEditorCanvas.cpp"/> | |||
| <FILE id="PYpzAE3jK" name="jucer_ComponentEditorCanvas.h" compile="0" | |||
| resource="0" file="Source/ui/Component Editor/jucer_ComponentEditorCanvas.h"/> | |||
| <FILE id="pqP7rsm8g" name="jucer_ComponentEditorCodeView.h" compile="0" | |||
| @@ -126,27 +130,29 @@ | |||
| file="Source/ui/Drawable Editor/jucer_DrawableEditor.cpp"/> | |||
| <FILE id="66AHRmzWg" name="jucer_DrawableEditor.h" compile="0" resource="0" | |||
| file="Source/ui/Drawable Editor/jucer_DrawableEditor.h"/> | |||
| <FILE id="rBnlhpny1" name="jucer_DrawableObjectComponent.h" compile="0" | |||
| resource="0" file="Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h"/> | |||
| <FILE id="orshHF5Az" name="jucer_DrawableTreeviewItem.h" compile="0" | |||
| resource="0" file="Source/ui/Drawable Editor/jucer_DrawableTreeviewItem.h"/> | |||
| <FILE id="fl8nLMRQB" name="jucer_DrawableEditorCanvas.h" compile="0" | |||
| resource="0" file="Source/ui/Drawable Editor/jucer_DrawableEditorCanvas.h"/> | |||
| <FILE id="NzwakrI5" name="jucer_DrawableEditorToolbar.h" compile="0" | |||
| resource="0" file="Source/ui/Drawable Editor/jucer_DrawableEditorToolbar.h"/> | |||
| <FILE id="ORcbUPiNo" name="jucer_DrawableEditorTreeView.h" compile="0" | |||
| resource="0" file="Source/ui/Drawable Editor/jucer_DrawableEditorTreeView.h"/> | |||
| </GROUP> | |||
| <GROUP id="DC6B03UF" name="Editor Base"> | |||
| <FILE id="am9MUoCGw" name="jucer_EditorCanvas.cpp" compile="1" resource="0" | |||
| file="Source/ui/Editor Base/jucer_EditorCanvas.cpp"/> | |||
| <FILE id="3JNJWgTRC" name="jucer_EditorCanvas.h" compile="0" resource="0" | |||
| file="Source/ui/Editor Base/jucer_EditorCanvas.h"/> | |||
| <FILE id="0Pma8CXyT" name="jucer_EditorDragOperation.h" compile="0" | |||
| resource="0" file="Source/ui/Editor Base/jucer_EditorDragOperation.h"/> | |||
| <FILE id="zmldA8b" name="jucer_EditorPanel.h" compile="0" resource="0" | |||
| file="Source/ui/Editor Base/jucer_EditorPanel.h"/> | |||
| </GROUP> | |||
| <FILE id="uuKrNBIAS" name="jucer_CommandIDs.h" compile="0" resource="0" | |||
| file="Source/ui/jucer_CommandIDs.h"/> | |||
| <FILE id="nKydCEjQp" name="jucer_CoordinatePropertyComponent.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_CoordinatePropertyComponent.h"/> | |||
| <FILE id="p410VfaaI" name="jucer_DocumentEditorComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_DocumentEditorComponent.cpp"/> | |||
| <FILE id="OyWSiFRV8" name="jucer_DocumentEditorComponent.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_DocumentEditorComponent.h"/> | |||
| <FILE id="qKXe4ZJk" name="jucer_GroupInformationComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_GroupInformationComponent.cpp"/> | |||
| <FILE id="B7Trw1pL" name="jucer_GroupInformationComponent.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_GroupInformationComponent.h"/> | |||
| <FILE id="SrG56RyDc" name="jucer_ItemPreviewComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_ItemPreviewComponent.cpp"/> | |||
| <FILE id="QkIGvWJEl" name="jucer_ItemPreviewComponent.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_ItemPreviewComponent.h"/> | |||
| <FILE id="YoCYXKlw1" name="jucer_JucerTreeViewBase.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_JucerTreeViewBase.cpp"/> | |||
| <FILE id="qIZzQUNrv" name="jucer_JucerTreeViewBase.h" compile="0" resource="0" | |||
| @@ -159,32 +165,46 @@ | |||
| resource="0" file="Source/ui/jucer_OpenDocumentManager.cpp"/> | |||
| <FILE id="3dKt81z9" name="jucer_OpenDocumentManager.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_OpenDocumentManager.h"/> | |||
| <FILE id="V5gS2pEfy" name="jucer_ProjectContentComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_ProjectContentComponent.cpp"/> | |||
| <FILE id="tG51D8f1Z" name="jucer_ProjectContentComponent.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_ProjectContentComponent.h"/> | |||
| <FILE id="4zWRyKEs9" name="jucer_ProjectInformationComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_ProjectInformationComponent.cpp"/> | |||
| <FILE id="WE75dKj97" name="jucer_ProjectInformationComponent.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_ProjectInformationComponent.h"/> | |||
| <FILE id="LrAM68c7J" name="jucer_ProjectTreeViewBase.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_ProjectTreeViewBase.cpp"/> | |||
| <FILE id="Kn5VMY6M" name="jucer_ProjectTreeViewBase.h" compile="0" | |||
| resource="0" file="Source/ui/jucer_ProjectTreeViewBase.h"/> | |||
| <FILE id="p9vRPSCY2" name="jucer_SourceCodeEditor.cpp" compile="1" | |||
| resource="0" file="Source/ui/jucer_SourceCodeEditor.cpp"/> | |||
| <FILE id="bY5hCm4jo" name="jucer_SourceCodeEditor.h" compile="0" resource="0" | |||
| file="Source/ui/jucer_SourceCodeEditor.h"/> | |||
| <FILE id="areTSB8vc" name="jucer_TreeViewTypes.cpp" compile="1" resource="0" | |||
| file="Source/ui/jucer_TreeViewTypes.cpp"/> | |||
| <FILE id="uzCI50bmN" name="jucer_TreeViewTypes.h" compile="0" resource="0" | |||
| file="Source/ui/jucer_TreeViewTypes.h"/> | |||
| <GROUP id="RUNKf0D3O" name="Project Editor"> | |||
| <FILE id="7No4c1oG9" name="jucer_GroupInformationComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/Project Editor/jucer_GroupInformationComponent.cpp"/> | |||
| <FILE id="bbI560U6U" name="jucer_GroupInformationComponent.h" compile="0" | |||
| resource="0" file="Source/ui/Project Editor/jucer_GroupInformationComponent.h"/> | |||
| <FILE id="Qm2T8C7Pl" name="jucer_ItemPreviewComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ItemPreviewComponent.cpp"/> | |||
| <FILE id="uf8WmnsG5" name="jucer_ItemPreviewComponent.h" compile="0" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ItemPreviewComponent.h"/> | |||
| <FILE id="u1V080fB" name="jucer_ProjectContentComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ProjectContentComponent.cpp"/> | |||
| <FILE id="TmYoyJboy" name="jucer_ProjectContentComponent.h" compile="0" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ProjectContentComponent.h"/> | |||
| <FILE id="87f08TAiX" name="jucer_ProjectInformationComponent.cpp" compile="1" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ProjectInformationComponent.cpp"/> | |||
| <FILE id="3Eiw7PzIU" name="jucer_ProjectInformationComponent.h" compile="0" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ProjectInformationComponent.h"/> | |||
| <FILE id="2W5ZoQvq7" name="jucer_ProjectTreeViewBase.cpp" compile="1" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ProjectTreeViewBase.cpp"/> | |||
| <FILE id="Rp1EojtV7" name="jucer_ProjectTreeViewBase.h" compile="0" | |||
| resource="0" file="Source/ui/Project Editor/jucer_ProjectTreeViewBase.h"/> | |||
| <FILE id="guPUbBpR" name="jucer_TreeViewTypes.cpp" compile="1" resource="0" | |||
| file="Source/ui/Project Editor/jucer_TreeViewTypes.cpp"/> | |||
| <FILE id="dofqja5Yb" name="jucer_TreeViewTypes.h" compile="0" resource="0" | |||
| file="Source/ui/Project Editor/jucer_TreeViewTypes.h"/> | |||
| </GROUP> | |||
| </GROUP> | |||
| <GROUP id="wje6dWhDW" name="Utility"> | |||
| <FILE id="hmWl0ODQe" name="jucer_ColourEditorComponent.h" compile="0" | |||
| resource="0" file="Source/utility/jucer_ColourEditorComponent.h"/> | |||
| <FILE id="bjibbvm3S" name="jucer_Colours.h" compile="0" resource="0" | |||
| file="Source/utility/jucer_Colours.h"/> | |||
| <FILE id="bDebnoSX" name="jucer_Coordinate.cpp" compile="1" resource="0" | |||
| file="Source/utility/jucer_Coordinate.cpp"/> | |||
| <FILE id="uqXX3Ga6S" name="jucer_Coordinate.h" compile="0" resource="0" | |||
| file="Source/utility/jucer_Coordinate.h"/> | |||
| <FILE id="DDCunFHcy" name="jucer_CoordinatePropertyComponent.h" compile="0" | |||
| resource="0" file="Source/utility/jucer_CoordinatePropertyComponent.h"/> | |||
| <FILE id="ZYrHhSqnP" name="jucer_MarkerListBase.h" compile="0" resource="0" | |||
| file="Source/utility/jucer_MarkerListBase.h"/> | |||
| <FILE id="nMKxowe0" name="jucer_RelativePath.h" compile="0" resource="0" | |||
| file="Source/utility/jucer_RelativePath.h"/> | |||
| <FILE id="gb8kYJDkJ" name="jucer_StoredSettings.cpp" compile="1" resource="0" | |||
| @@ -56,5 +56,9 @@ const char* const headerFileExtensions = "h;hpp"; | |||
| const int numSwatchColours = 24; | |||
| const int snapSizes[] = { 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 32 }; | |||
| const float snapDistance = 8.0f; | |||
| static const Colour alignmentMarkerColour (0x77ff0000); | |||
| static const Colour resizableBorderColour (0x7066aaff); | |||
| #endif // __JUCER_HEADERS_JUCEHEADER__ | |||
| @@ -25,7 +25,7 @@ | |||
| #include "jucer_ComponentTypeManager.h" | |||
| #include "jucer_ComponentTypes.h" | |||
| #include "../../ui/jucer_CoordinatePropertyComponent.h" | |||
| #include "../../../utility/jucer_CoordinatePropertyComponent.h" | |||
| //============================================================================== | |||
| @@ -191,7 +191,9 @@ void ComponentTypeHandler::initialiseNewItem (ComponentDocument& document, Value | |||
| const Rectangle<int> bounds (getDefaultSize().withPosition (Point<int> (Random::getSystemRandom().nextInt (100) + 100, | |||
| Random::getSystemRandom().nextInt (100) + 100))); | |||
| state.setProperty (ComponentDocument::compBoundsProperty, RectangleCoordinates (bounds, state [ComponentDocument::memberNameProperty]).toString(), 0); | |||
| state.setProperty (ComponentDocument::compBoundsProperty, | |||
| RectangleCoordinates (bounds.toFloat(), | |||
| state [ComponentDocument::memberNameProperty]).toString(), 0); | |||
| } | |||
| @@ -26,9 +26,9 @@ | |||
| #ifndef __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__ | |||
| #define __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__ | |||
| #include "../../jucer_Headers.h" | |||
| #include "../../../jucer_Headers.h" | |||
| #include "../jucer_ComponentDocument.h" | |||
| #include "../../utility/jucer_ColourEditorComponent.h" | |||
| #include "../../../utility/jucer_ColourEditorComponent.h" | |||
| //============================================================================== | |||
| @@ -26,8 +26,8 @@ | |||
| #ifndef __JUCER_CODEGENERATOR_H_F79AEF58__ | |||
| #define __JUCER_CODEGENERATOR_H_F79AEF58__ | |||
| #include "../jucer_Headers.h" | |||
| #include "jucer_Project.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "../Project/jucer_Project.h" | |||
| //============================================================================== | |||
| @@ -24,8 +24,8 @@ | |||
| */ | |||
| #include "jucer_ComponentDocument.h" | |||
| #include "Component Types/jucer_ComponentTypeManager.h" | |||
| #include "../ui/jucer_CoordinatePropertyComponent.h" | |||
| #include "Types/jucer_ComponentTypeManager.h" | |||
| #include "../../utility/jucer_CoordinatePropertyComponent.h" | |||
| //============================================================================== | |||
| @@ -33,7 +33,6 @@ static const char* const componentDocumentTag = "COMPONENT"; | |||
| static const char* const componentGroupTag = "COMPONENTS"; | |||
| static const char* const markersGroupXTag = "MARKERS_X"; | |||
| static const char* const markersGroupYTag = "MARKERS_Y"; | |||
| static const char* const markerTag = "MARKER"; | |||
| static const char* const metadataTagStart = "JUCER_" "COMPONENT_METADATA_START"; // written like this to avoid thinking this file is a component! | |||
| static const char* const metadataTagEnd = "JUCER_" "COMPONENT_METADATA_END"; | |||
| @@ -44,8 +43,6 @@ const char* const ComponentDocument::memberNameProperty = "memberName"; | |||
| const char* const ComponentDocument::compNameProperty = "name"; | |||
| const char* const ComponentDocument::compTooltipProperty = "tooltip"; | |||
| const char* const ComponentDocument::compFocusOrderProperty = "focusOrder"; | |||
| const char* const ComponentDocument::markerNameProperty = "name"; | |||
| const char* const ComponentDocument::markerPosProperty = "position"; | |||
| //============================================================================== | |||
| @@ -575,71 +572,21 @@ const String ComponentDocument::getNonExistentMemberName (String suggestedName) | |||
| //============================================================================== | |||
| ComponentDocument::MarkerList::MarkerList (ComponentDocument& document_, const bool isX_) | |||
| : document (document_), | |||
| group (document_.getRoot().getChildWithName (isX_ ? markersGroupXTag : markersGroupYTag)), | |||
| isX (isX_) | |||
| : MarkerListBase (document_.getRoot().getChildWithName (isX_ ? markersGroupXTag : markersGroupYTag), isX_), | |||
| document (document_) | |||
| { | |||
| jassert (group.isValid()); | |||
| jassert (group.isAChildOf (document_.getRoot())); | |||
| } | |||
| ValueTree& ComponentDocument::MarkerList::getGroup() | |||
| UndoManager* ComponentDocument::MarkerList::getUndoManager() const | |||
| { | |||
| return group; | |||
| return document.getUndoManager(); | |||
| } | |||
| int ComponentDocument::MarkerList::size() const | |||
| const String ComponentDocument::MarkerList::getNonexistentMarkerName (const String& name) | |||
| { | |||
| return group.getNumChildren(); | |||
| } | |||
| ValueTree ComponentDocument::MarkerList::getMarker (int index) const | |||
| { | |||
| return group.getChild (index); | |||
| } | |||
| ValueTree ComponentDocument::MarkerList::getMarkerNamed (const String& name) const | |||
| { | |||
| return group.getChildWithProperty (markerNameProperty, name); | |||
| } | |||
| bool ComponentDocument::MarkerList::contains (const ValueTree& markerState) const | |||
| { | |||
| return markerState.isAChildOf (group); | |||
| } | |||
| const Coordinate ComponentDocument::MarkerList::getCoordinate (const ValueTree& markerState) const | |||
| { | |||
| return Coordinate (markerState [markerPosProperty].toString(), isX); | |||
| } | |||
| const String ComponentDocument::MarkerList::getName (const ValueTree& markerState) const | |||
| { | |||
| return markerState [markerNameProperty].toString(); | |||
| } | |||
| Value ComponentDocument::MarkerList::getNameAsValue (const ValueTree& markerState) const | |||
| { | |||
| return markerState.getPropertyAsValue (markerNameProperty, document.getUndoManager()); | |||
| } | |||
| void ComponentDocument::MarkerList::setCoordinate (ValueTree& markerState, const Coordinate& newCoord) | |||
| { | |||
| markerState.setProperty (markerPosProperty, newCoord.toString(), document.getUndoManager()); | |||
| } | |||
| void ComponentDocument::MarkerList::createMarker (const String& name, int position) | |||
| { | |||
| ValueTree marker (markerTag); | |||
| marker.setProperty (markerNameProperty, document.getNonexistentMarkerName (name), 0); | |||
| marker.setProperty (markerPosProperty, Coordinate (position, isX).toString(), 0); | |||
| marker.setProperty (idProperty, createAlphaNumericUID(), 0); | |||
| group.addChild (marker, -1, document.getUndoManager()); | |||
| } | |||
| void ComponentDocument::MarkerList::deleteMarker (ValueTree& markerState) | |||
| { | |||
| group.removeChild (markerState, document.getUndoManager()); | |||
| return document.getNonexistentMarkerName (name); | |||
| } | |||
| const Coordinate ComponentDocument::MarkerList::findMarker (const String& name, bool isHorizontal) const | |||
| @@ -729,21 +676,16 @@ private: | |||
| ValueTree markerState; | |||
| }; | |||
| void ComponentDocument::MarkerList::createMarkerProperties (Array <PropertyComponent*>& props, ValueTree& marker) | |||
| { | |||
| props.add (new TextPropertyComponent (getNameAsValue (marker), "Marker Name", 256, false)); | |||
| props.add (new MarkerPositionComponent (document, "Position", marker, | |||
| marker.getPropertyAsValue (markerPosProperty, document.getUndoManager()), | |||
| contains (marker))); | |||
| } | |||
| bool ComponentDocument::MarkerList::createProperties (Array <PropertyComponent*>& props, const String& itemId) | |||
| { | |||
| ValueTree marker (group.getChildWithProperty (idProperty, itemId)); | |||
| if (marker.isValid()) | |||
| { | |||
| createMarkerProperties (props, marker); | |||
| props.add (new TextPropertyComponent (getNameAsValue (marker), "Marker Name", 256, false)); | |||
| props.add (new MarkerPositionComponent (document, "Position", marker, | |||
| marker.getPropertyAsValue (getMarkerPosProperty(), document.getUndoManager()), | |||
| contains (marker))); | |||
| return true; | |||
| } | |||
| @@ -26,9 +26,10 @@ | |||
| #ifndef __JUCER_COMPONENTDOCUMENT_JUCEHEADER__ | |||
| #define __JUCER_COMPONENTDOCUMENT_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "jucer_Project.h" | |||
| #include "jucer_Coordinate.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "../Project/jucer_Project.h" | |||
| #include "../../utility/jucer_Coordinate.h" | |||
| #include "../../utility/jucer_MarkerListBase.h" | |||
| #include "jucer_CodeGenerator.h" | |||
| @@ -86,36 +87,20 @@ public: | |||
| void performNewComponentMenuItem (int menuResultCode); | |||
| //============================================================================== | |||
| class MarkerList : public Coordinate::MarkerResolver | |||
| class MarkerList : public MarkerListBase | |||
| { | |||
| public: | |||
| MarkerList (ComponentDocument& document, bool isX); | |||
| ValueTree& getGroup(); | |||
| int size() const; | |||
| ValueTree getMarker (int index) const; | |||
| ValueTree getMarkerNamed (const String& name) const; | |||
| bool contains (const ValueTree& markerState) const; | |||
| const Coordinate getCoordinate (const ValueTree& markerState) const; | |||
| const String getName (const ValueTree& markerState) const; | |||
| Value getNameAsValue (const ValueTree& markerState) const; | |||
| void setCoordinate (ValueTree& markerState, const Coordinate& newCoord); | |||
| void createMarker (const String& name, int position); | |||
| void deleteMarker (ValueTree& markerState); | |||
| // for Coordinate::MarkerResolver: | |||
| const Coordinate findMarker (const String& name, bool isHorizontal) const; | |||
| bool createProperties (Array <PropertyComponent*>& props, const String& itemId); | |||
| void createMarkerProperties (Array <PropertyComponent*>& props, ValueTree& marker); | |||
| void addMarkerMenuItems (const ValueTree& markerState, const Coordinate& coord, PopupMenu& menu, bool isAnchor1); | |||
| const String getChosenMarkerMenuItem (const Coordinate& coord, int itemId) const; | |||
| UndoManager* getUndoManager() const; | |||
| const String getNonexistentMarkerName (const String& name); | |||
| private: | |||
| ComponentDocument& document; | |||
| ValueTree group; | |||
| const bool isX; | |||
| MarkerList (const MarkerList&); | |||
| MarkerList& operator= (const MarkerList&); | |||
| @@ -162,8 +147,6 @@ public: | |||
| static const char* const compNameProperty; | |||
| static const char* const compTooltipProperty; | |||
| static const char* const compFocusOrderProperty; | |||
| static const char* const markerNameProperty; | |||
| static const char* const markerPosProperty; | |||
| static const char* const jucerIDProperty; | |||
| static const String getJucerIDFor (Component* c); | |||
| @@ -0,0 +1,406 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #include "jucer_DrawableDocument.h" | |||
| //============================================================================== | |||
| static const char* const drawableTag = "DRAWABLE"; | |||
| static const char* const markersGroupXTag = "MARKERS_X"; | |||
| static const char* const markersGroupYTag = "MARKERS_Y"; | |||
| //============================================================================== | |||
| DrawableDocument::DrawableDocument (Project* project_, const File& drawableFile_) | |||
| : project (project_), | |||
| drawableFile (drawableFile_), | |||
| root (drawableTag), | |||
| saveAsXml (true), | |||
| needsSaving (false) | |||
| { | |||
| DrawableComposite dc; | |||
| root.addChild (dc.createValueTree(), -1, 0); | |||
| setName ("Drawable"); | |||
| checkRootObject(); | |||
| root.addListener (this); | |||
| } | |||
| DrawableDocument::~DrawableDocument() | |||
| { | |||
| if (needsSaving) | |||
| save(); | |||
| root.removeListener (this); | |||
| } | |||
| ValueTree DrawableDocument::getRootDrawableNode() const | |||
| { | |||
| return root.getChild (0); | |||
| } | |||
| void DrawableDocument::checkRootObject() | |||
| { | |||
| if (markersX == 0) | |||
| markersX = new MarkerList (*this, true); | |||
| if (markersY == 0) | |||
| markersY = new MarkerList (*this, false); | |||
| if ((int) getCanvasWidth().getValue() <= 0) | |||
| getCanvasWidth() = 500; | |||
| if ((int) getCanvasHeight().getValue() <= 0) | |||
| getCanvasHeight() = 500; | |||
| } | |||
| const String DrawableDocument::getIdFor (const ValueTree& object) | |||
| { | |||
| return object ["id"]; | |||
| } | |||
| //============================================================================== | |||
| void DrawableDocument::setName (const String& name) | |||
| { | |||
| root.setProperty ("name", name, getUndoManager()); | |||
| } | |||
| const String DrawableDocument::getName() const | |||
| { | |||
| return root ["name"]; | |||
| } | |||
| void DrawableDocument::addMissingIds (ValueTree tree) const | |||
| { | |||
| if (! tree.hasProperty ("id")) | |||
| tree.setProperty ("id", createAlphaNumericUID(), 0); | |||
| for (int i = tree.getNumChildren(); --i >= 0;) | |||
| addMissingIds (tree.getChild(i)); | |||
| } | |||
| bool DrawableDocument::hasChangedSinceLastSave() const | |||
| { | |||
| return needsSaving; | |||
| } | |||
| bool DrawableDocument::reload() | |||
| { | |||
| ScopedPointer <InputStream> stream (drawableFile.createInputStream()); | |||
| if (stream != 0 && load (*stream)) | |||
| { | |||
| checkRootObject(); | |||
| undoManager.clearUndoHistory(); | |||
| needsSaving = false; | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| bool DrawableDocument::save() | |||
| { | |||
| TemporaryFile tempFile (drawableFile); | |||
| ScopedPointer <OutputStream> out (tempFile.getFile().createOutputStream()); | |||
| if (out == 0) | |||
| return false; | |||
| save (*out); | |||
| needsSaving = ! tempFile.overwriteTargetFileWithTemporary(); | |||
| return ! needsSaving; | |||
| } | |||
| void DrawableDocument::save (OutputStream& output) | |||
| { | |||
| if (saveAsXml) | |||
| { | |||
| ScopedPointer <XmlElement> xml (root.createXml()); | |||
| jassert (xml != 0); | |||
| if (xml != 0) | |||
| xml->writeToStream (output, String::empty, false, false); | |||
| } | |||
| else | |||
| { | |||
| root.writeToStream (output); | |||
| } | |||
| } | |||
| bool DrawableDocument::load (InputStream& input) | |||
| { | |||
| int64 originalPos = input.getPosition(); | |||
| ValueTree loadedTree ("dummy"); | |||
| XmlDocument xmlDoc (input.readEntireStreamAsString()); | |||
| ScopedPointer <XmlElement> xml (xmlDoc.getDocumentElement()); | |||
| if (xml != 0) | |||
| { | |||
| loadedTree = ValueTree::fromXml (*xml); | |||
| } | |||
| else | |||
| { | |||
| input.setPosition (originalPos); | |||
| loadedTree = ValueTree::readFromStream (input); | |||
| } | |||
| if (loadedTree.hasType (drawableTag)) | |||
| { | |||
| addMissingIds (loadedTree); | |||
| root.removeListener (this); | |||
| root = loadedTree; | |||
| root.addListener (this); | |||
| valueTreeParentChanged (loadedTree); | |||
| needsSaving = false; | |||
| undoManager.clearUndoHistory(); | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| void DrawableDocument::changed() | |||
| { | |||
| needsSaving = true; | |||
| sendChangeMessage (this); | |||
| } | |||
| //============================================================================== | |||
| static const Colour getRandomColour() | |||
| { | |||
| return Colours::red.withHue (Random::getSystemRandom().nextFloat()); | |||
| } | |||
| void DrawableDocument::addDrawable (Drawable& d) | |||
| { | |||
| DrawableComposite dc; | |||
| dc.insertDrawable (d.createCopy()); | |||
| ValueTree dcNode (dc.createValueTree()); | |||
| ValueTree subNode (dcNode.getChild(0)); | |||
| dcNode.removeChild (subNode, 0); | |||
| addMissingIds (subNode); | |||
| getRootDrawableNode().addChild (subNode, -1, getUndoManager()); | |||
| } | |||
| void DrawableDocument::addRectangle() | |||
| { | |||
| Path p; | |||
| p.addRectangle ((float) Random::getSystemRandom().nextInt (500), | |||
| (float) Random::getSystemRandom().nextInt (500), | |||
| 100.0f, 100.0f); | |||
| DrawablePath d; | |||
| d.setPath (p); | |||
| d.setFill (FillType (getRandomColour())); | |||
| addDrawable (d); | |||
| } | |||
| void DrawableDocument::addCircle() | |||
| { | |||
| Path p; | |||
| p.addEllipse ((float) Random::getSystemRandom().nextInt (500), | |||
| (float) Random::getSystemRandom().nextInt (500), | |||
| 100.0f, 100.0f); | |||
| DrawablePath d; | |||
| d.setPath (p); | |||
| d.setFill (FillType (getRandomColour())); | |||
| addDrawable (d); | |||
| } | |||
| void DrawableDocument::addImage (const File& imageFile) | |||
| { | |||
| jassertfalse | |||
| DrawableImage d; | |||
| addDrawable (d); | |||
| } | |||
| //============================================================================== | |||
| void DrawableDocument::valueTreePropertyChanged (ValueTree& tree, const var::identifier& name) | |||
| { | |||
| changed(); | |||
| } | |||
| void DrawableDocument::valueTreeChildrenChanged (ValueTree& tree) | |||
| { | |||
| changed(); | |||
| } | |||
| void DrawableDocument::valueTreeParentChanged (ValueTree& tree) | |||
| { | |||
| changed(); | |||
| } | |||
| //============================================================================== | |||
| const Coordinate DrawableDocument::findMarker (const String& name, bool isHorizontal) const | |||
| { | |||
| if (name == Coordinate::parentRightMarkerName) return Coordinate ((double) getCanvasWidth().getValue(), isHorizontal); | |||
| if (name == Coordinate::parentBottomMarkerName) return Coordinate ((double) getCanvasHeight().getValue(), isHorizontal); | |||
| if (name.containsChar ('.')) | |||
| { | |||
| const String compName (name.upToFirstOccurrenceOf (".", false, false).trim()); | |||
| const String edge (name.fromFirstOccurrenceOf (".", false, false).trim()); | |||
| if (compName.isNotEmpty() && edge.isNotEmpty()) | |||
| { | |||
| /* const ValueTree comp (getComponentWithMemberName (compName)); | |||
| if (comp.isValid()) | |||
| { | |||
| const RectangleCoordinates coords (getCoordsFor (comp)); | |||
| if (edge == "left") return coords.left; | |||
| if (edge == "right") return coords.right; | |||
| if (edge == "top") return coords.top; | |||
| if (edge == "bottom") return coords.bottom; | |||
| }*/ | |||
| } | |||
| } | |||
| const ValueTree marker (getMarkerList (isHorizontal).getMarkerNamed (name)); | |||
| if (marker.isValid()) | |||
| return getMarkerList (isHorizontal).getCoordinate (marker); | |||
| return Coordinate (isHorizontal); | |||
| } | |||
| DrawableDocument::MarkerList::MarkerList (DrawableDocument& document_, bool isX_) | |||
| : MarkerListBase (document_.getRoot().getChildWithName (isX_ ? markersGroupXTag : markersGroupYTag), isX_), | |||
| document (document_) | |||
| { | |||
| } | |||
| const Coordinate DrawableDocument::MarkerList::findMarker (const String& name, bool isHorizontal) const | |||
| { | |||
| if (isHorizontal == isX) | |||
| { | |||
| if (name == Coordinate::parentRightMarkerName) return Coordinate ((double) document.getCanvasWidth().getValue(), isHorizontal); | |||
| if (name == Coordinate::parentBottomMarkerName) return Coordinate ((double) document.getCanvasHeight().getValue(), isHorizontal); | |||
| const ValueTree marker (document.getMarkerList (isHorizontal).getMarkerNamed (name)); | |||
| if (marker.isValid()) | |||
| return document.getMarkerList (isHorizontal).getCoordinate (marker); | |||
| } | |||
| return Coordinate (isX); | |||
| } | |||
| bool DrawableDocument::MarkerList::createProperties (Array <PropertyComponent*>& props, const String& itemId) | |||
| { | |||
| ValueTree marker (group.getChildWithProperty (getIdProperty(), itemId)); | |||
| if (marker.isValid()) | |||
| { | |||
| props.add (new TextPropertyComponent (getNameAsValue (marker), "Marker Name", 256, false)); | |||
| // props.add (new MarkerPositionComponent (document, "Position", marker, | |||
| // marker.getPropertyAsValue (markerPosProperty, document.getUndoManager()), | |||
| // contains (marker))); | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| void DrawableDocument::addMarkerMenuItem (int i, const Coordinate& coord, const String& name, PopupMenu& menu, | |||
| bool isAnchor1, const String& fullCoordName) | |||
| { | |||
| Coordinate requestedCoord (findMarker (name, coord.isHorizontal())); | |||
| // menu.addItem (i, name, | |||
| // ! (name == fullCoordName || requestedCoord.referencesIndirectly (fullCoordName, *this)), | |||
| // name == (isAnchor1 ? coord.getAnchor1() : coord.getAnchor2())); | |||
| } | |||
| void DrawableDocument::MarkerList::addMarkerMenuItems (const ValueTree& markerState, const Coordinate& coord, PopupMenu& menu, bool isAnchor1) | |||
| { | |||
| const String fullCoordName (getName (markerState)); | |||
| if (coord.isHorizontal()) | |||
| { | |||
| document.addMarkerMenuItem (1, coord, Coordinate::parentLeftMarkerName, menu, isAnchor1, fullCoordName); | |||
| document.addMarkerMenuItem (2, coord, Coordinate::parentRightMarkerName, menu, isAnchor1, fullCoordName); | |||
| } | |||
| else | |||
| { | |||
| document.addMarkerMenuItem (1, coord, Coordinate::parentTopMarkerName, menu, isAnchor1, fullCoordName); | |||
| document.addMarkerMenuItem (2, coord, Coordinate::parentBottomMarkerName, menu, isAnchor1, fullCoordName); | |||
| } | |||
| menu.addSeparator(); | |||
| const MarkerList& markerList = document.getMarkerList (coord.isHorizontal()); | |||
| for (int i = 0; i < markerList.size(); ++i) | |||
| document.addMarkerMenuItem (100 + i, coord, markerList.getName (markerList.getMarker (i)), menu, isAnchor1, fullCoordName); | |||
| } | |||
| const String DrawableDocument::MarkerList::getChosenMarkerMenuItem (const Coordinate& coord, int i) const | |||
| { | |||
| if (i == 1) return coord.isHorizontal() ? Coordinate::parentLeftMarkerName : Coordinate::parentTopMarkerName; | |||
| if (i == 2) return coord.isHorizontal() ? Coordinate::parentRightMarkerName : Coordinate::parentBottomMarkerName; | |||
| const MarkerList& markerList = document.getMarkerList (coord.isHorizontal()); | |||
| if (i >= 100 && i < 10000) | |||
| return markerList.getName (markerList.getMarker (i - 100)); | |||
| jassertfalse; | |||
| return String::empty; | |||
| } | |||
| UndoManager* DrawableDocument::MarkerList::getUndoManager() const | |||
| { | |||
| return document.getUndoManager(); | |||
| } | |||
| const String DrawableDocument::MarkerList::getNonexistentMarkerName (const String& name) | |||
| { | |||
| return document.getNonexistentMarkerName (name); | |||
| } | |||
| const String DrawableDocument::getNonexistentMarkerName (const String& name) | |||
| { | |||
| String n (makeValidCppIdentifier (name, false, true, false)); | |||
| int suffix = 2; | |||
| while (markersX->getMarkerNamed (n).isValid() || markersY->getMarkerNamed (n).isValid()) | |||
| n = n.trimCharactersAtEnd ("0123456789") + String (suffix++); | |||
| return n; | |||
| } | |||
| @@ -26,14 +26,15 @@ | |||
| #ifndef __JUCER_DRAWABLEDOCUMENT_JUCEHEADER__ | |||
| #define __JUCER_DRAWABLEDOCUMENT_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "jucer_Project.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "../Project/jucer_Project.h" | |||
| #include "../../utility/jucer_Coordinate.h" | |||
| #include "../../utility/jucer_MarkerListBase.h" | |||
| //============================================================================== | |||
| class DrawableDocument : public ValueTree::Listener, | |||
| public ChangeBroadcaster, | |||
| public Timer | |||
| public ChangeBroadcaster | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| @@ -49,34 +50,75 @@ public: | |||
| bool hasChangedSinceLastSave() const; | |||
| void changed(); | |||
| ValueTree& getRoot() { return root; } | |||
| ValueTree getRootDrawableNode() const; | |||
| void addRectangle(); | |||
| void addCircle(); | |||
| void addImage (const File& imageFile); | |||
| Value getCanvasWidth() const { return getRootValueNonUndoable ("width"); } | |||
| Value getCanvasHeight() const { return getRootValueNonUndoable ("height"); } | |||
| static const String getIdFor (const ValueTree& object); | |||
| //============================================================================== | |||
| class MarkerList : public MarkerListBase | |||
| { | |||
| public: | |||
| MarkerList (DrawableDocument& document, bool isX); | |||
| ~MarkerList() {} | |||
| const Coordinate findMarker (const String& name, bool isHorizontal) const; | |||
| bool createProperties (Array <PropertyComponent*>& props, const String& itemId); | |||
| void addMarkerMenuItems (const ValueTree& markerState, const Coordinate& coord, PopupMenu& menu, bool isAnchor1); | |||
| const String getChosenMarkerMenuItem (const Coordinate& coord, int itemId) const; | |||
| UndoManager* getUndoManager() const; | |||
| const String getNonexistentMarkerName (const String& name); | |||
| private: | |||
| DrawableDocument& document; | |||
| MarkerList (const MarkerList&); | |||
| MarkerList& operator= (const MarkerList&); | |||
| }; | |||
| MarkerList& getMarkerListX() const { return *markersX; } | |||
| MarkerList& getMarkerListY() const { return *markersY; } | |||
| MarkerList& getMarkerList (bool isX) const { return isX ? *markersX : *markersY; } | |||
| const String getNonexistentMarkerName (const String& name); | |||
| //============================================================================== | |||
| void valueTreePropertyChanged (ValueTree& tree, const var::identifier& name); | |||
| void valueTreeChildrenChanged (ValueTree& tree); | |||
| void valueTreeParentChanged (ValueTree& tree); | |||
| void timerCallback(); | |||
| //============================================================================== | |||
| UndoManager* getUndoManager() throw() { return &undoManager; } | |||
| UndoManager* getUndoManager() const throw() { return &undoManager; } | |||
| private: | |||
| Project* project; | |||
| File drawableFile; | |||
| ValueTree drawableRoot; | |||
| UndoManager undoManager; | |||
| ValueTree root; | |||
| ScopedPointer<MarkerList> markersX, markersY; | |||
| mutable UndoManager undoManager; | |||
| bool saveAsXml, needsSaving; | |||
| void checkRootObject(); | |||
| Value getRootValueUndoable (const var::identifier& name) const { return root.getPropertyAsValue (name, getUndoManager()); } | |||
| Value getRootValueNonUndoable (const var::identifier& name) const { return root.getPropertyAsValue (name, 0); } | |||
| void save (OutputStream& output); | |||
| bool load (InputStream& input); | |||
| void addMissingIds (ValueTree tree) const; | |||
| void addDrawable (Drawable& d); | |||
| const Coordinate findMarker (const String& name, bool isHorizontal) const; | |||
| void addMarkerMenuItem (int i, const Coordinate& coord, const String& name, PopupMenu& menu, | |||
| bool isAnchor1, const String& fullCoordName); | |||
| }; | |||
| @@ -24,8 +24,8 @@ | |||
| */ | |||
| #include "jucer_NewFileWizard.h" | |||
| #include "jucer_DrawableDocument.h" | |||
| #include "jucer_ComponentDocument.h" | |||
| #include "../Drawable/jucer_DrawableDocument.h" | |||
| #include "../Component/jucer_ComponentDocument.h" | |||
| //============================================================================== | |||
| @@ -26,7 +26,7 @@ | |||
| #ifndef __JUCER_NEWFILEWIZARD_JUCEHEADER__ | |||
| #define __JUCER_NEWFILEWIZARD_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "jucer_Project.h" | |||
| @@ -27,7 +27,7 @@ | |||
| #include "jucer_ProjectExporter.h" | |||
| #include "jucer_ResourceFile.h" | |||
| #include "jucer_ProjectSaver.h" | |||
| #include "../ui/jucer_OpenDocumentManager.h" | |||
| #include "../../ui/jucer_OpenDocumentManager.h" | |||
| //============================================================================== | |||
| @@ -26,7 +26,7 @@ | |||
| #ifndef __JUCER_PROJECT_JUCEHEADER__ | |||
| #define __JUCER_PROJECT_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "../../jucer_Headers.h" | |||
| class ProjectExporter; | |||
| //============================================================================== | |||
| @@ -26,7 +26,7 @@ | |||
| #ifndef __JUCER_PROJECTEXPORTER_JUCEHEADER__ | |||
| #define __JUCER_PROJECTEXPORTER_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "jucer_Project.h" | |||
| @@ -26,7 +26,7 @@ | |||
| #ifndef __JUCER_PROJECTWIZARD_JUCEHEADER__ | |||
| #define __JUCER_PROJECTWIZARD_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "jucer_Project.h" | |||
| @@ -24,8 +24,8 @@ | |||
| */ | |||
| #include "jucer_ResourceFile.h" | |||
| #include "../ui/jucer_ProjectTreeViewBase.h" | |||
| #include "../ui/jucer_OpenDocumentManager.h" | |||
| #include "../../ui/Project Editor/jucer_ProjectTreeViewBase.h" | |||
| #include "../../ui/jucer_OpenDocumentManager.h" | |||
| static const char* resourceFileIdentifierString = "JUCER_BINARY_RESOURCE"; | |||
| @@ -26,7 +26,7 @@ | |||
| #ifndef __JUCER_RESOURCEFILE_JUCEHEADER__ | |||
| #define __JUCER_RESOURCEFILE_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "jucer_Project.h" | |||
| @@ -1,253 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #include "jucer_DrawableDocument.h" | |||
| #include "jucer_ResourceFile.h" | |||
| //============================================================================== | |||
| static const char* const drawableTag = "DRAWABLE"; | |||
| //============================================================================== | |||
| DrawableDocument::DrawableDocument (Project* project_, const File& drawableFile_) | |||
| : project (project_), | |||
| drawableFile (drawableFile_), | |||
| drawableRoot (drawableTag), | |||
| saveAsXml (true), needsSaving (false) | |||
| { | |||
| DrawableComposite dc; | |||
| drawableRoot.addChild (dc.createValueTree(), -1, 0); | |||
| setName ("Drawable"); | |||
| drawableRoot.addListener (this); | |||
| } | |||
| DrawableDocument::~DrawableDocument() | |||
| { | |||
| if (needsSaving) | |||
| save(); | |||
| drawableRoot.removeListener (this); | |||
| } | |||
| ValueTree DrawableDocument::getRootDrawableNode() const | |||
| { | |||
| return drawableRoot.getChild (0); | |||
| } | |||
| //============================================================================== | |||
| void DrawableDocument::setName (const String& name) | |||
| { | |||
| drawableRoot.setProperty ("name", name, getUndoManager()); | |||
| } | |||
| const String DrawableDocument::getName() const | |||
| { | |||
| return drawableRoot ["name"]; | |||
| } | |||
| void DrawableDocument::addMissingIds (ValueTree tree) const | |||
| { | |||
| if (! tree.hasProperty ("id")) | |||
| tree.setProperty ("id", createAlphaNumericUID(), 0); | |||
| for (int i = tree.getNumChildren(); --i >= 0;) | |||
| addMissingIds (tree.getChild(i)); | |||
| } | |||
| bool DrawableDocument::hasChangedSinceLastSave() const | |||
| { | |||
| return needsSaving; | |||
| } | |||
| bool DrawableDocument::reload() | |||
| { | |||
| ScopedPointer <InputStream> stream (drawableFile.createInputStream()); | |||
| if (stream != 0 && load (*stream)) | |||
| { | |||
| undoManager.clearUndoHistory(); | |||
| needsSaving = false; | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| bool DrawableDocument::save() | |||
| { | |||
| TemporaryFile tempFile (drawableFile); | |||
| ScopedPointer <OutputStream> out (tempFile.getFile().createOutputStream()); | |||
| if (out == 0) | |||
| return false; | |||
| save (*out); | |||
| needsSaving = ! tempFile.overwriteTargetFileWithTemporary(); | |||
| return ! needsSaving; | |||
| } | |||
| void DrawableDocument::save (OutputStream& output) | |||
| { | |||
| if (saveAsXml) | |||
| { | |||
| ScopedPointer <XmlElement> xml (drawableRoot.createXml()); | |||
| jassert (xml != 0); | |||
| if (xml != 0) | |||
| xml->writeToStream (output, String::empty, false, false); | |||
| } | |||
| else | |||
| { | |||
| drawableRoot.writeToStream (output); | |||
| } | |||
| } | |||
| bool DrawableDocument::load (InputStream& input) | |||
| { | |||
| int64 originalPos = input.getPosition(); | |||
| ValueTree loadedTree ("dummy"); | |||
| XmlDocument xmlDoc (input.readEntireStreamAsString()); | |||
| ScopedPointer <XmlElement> xml (xmlDoc.getDocumentElement()); | |||
| if (xml != 0) | |||
| { | |||
| loadedTree = ValueTree::fromXml (*xml); | |||
| } | |||
| else | |||
| { | |||
| input.setPosition (originalPos); | |||
| loadedTree = ValueTree::readFromStream (input); | |||
| } | |||
| if (loadedTree.hasType (drawableTag)) | |||
| { | |||
| addMissingIds (loadedTree); | |||
| drawableRoot.removeListener (this); | |||
| drawableRoot = loadedTree; | |||
| drawableRoot.addListener (this); | |||
| valueTreeParentChanged (loadedTree); | |||
| needsSaving = false; | |||
| undoManager.clearUndoHistory(); | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| void DrawableDocument::changed() | |||
| { | |||
| needsSaving = true; | |||
| startTimer (1000); | |||
| sendChangeMessage (this); | |||
| } | |||
| void DrawableDocument::timerCallback() | |||
| { | |||
| stopTimer(); | |||
| getUndoManager()->beginNewTransaction(); | |||
| //if (needsSaving) | |||
| // save(); | |||
| } | |||
| //============================================================================== | |||
| static const Colour getRandomColour() | |||
| { | |||
| return Colours::red.withHue (Random::getSystemRandom().nextFloat()); | |||
| } | |||
| void DrawableDocument::addDrawable (Drawable& d) | |||
| { | |||
| DrawableComposite dc; | |||
| dc.insertDrawable (d.createCopy()); | |||
| ValueTree dcNode (dc.createValueTree()); | |||
| ValueTree subNode (dcNode.getChild(0)); | |||
| dcNode.removeChild (subNode, 0); | |||
| addMissingIds (subNode); | |||
| getRootDrawableNode().addChild (subNode, -1, getUndoManager()); | |||
| } | |||
| void DrawableDocument::addRectangle() | |||
| { | |||
| Path p; | |||
| p.addRectangle ((float) Random::getSystemRandom().nextInt (500), | |||
| (float) Random::getSystemRandom().nextInt (500), | |||
| 100.0f, 100.0f); | |||
| DrawablePath d; | |||
| d.setPath (p); | |||
| d.setFill (FillType (getRandomColour())); | |||
| addDrawable (d); | |||
| } | |||
| void DrawableDocument::addCircle() | |||
| { | |||
| Path p; | |||
| p.addEllipse ((float) Random::getSystemRandom().nextInt (500), | |||
| (float) Random::getSystemRandom().nextInt (500), | |||
| 100.0f, 100.0f); | |||
| DrawablePath d; | |||
| d.setPath (p); | |||
| d.setFill (FillType (getRandomColour())); | |||
| addDrawable (d); | |||
| } | |||
| void DrawableDocument::addImage (const File& imageFile) | |||
| { | |||
| jassertfalse | |||
| DrawableImage d; | |||
| addDrawable (d); | |||
| } | |||
| //============================================================================== | |||
| void DrawableDocument::valueTreePropertyChanged (ValueTree& tree, const var::identifier& name) | |||
| { | |||
| changed(); | |||
| } | |||
| void DrawableDocument::valueTreeChildrenChanged (ValueTree& tree) | |||
| { | |||
| changed(); | |||
| } | |||
| void DrawableDocument::valueTreeParentChanged (ValueTree& tree) | |||
| { | |||
| changed(); | |||
| } | |||
| @@ -24,7 +24,7 @@ | |||
| */ | |||
| #include "jucer_SourceCodeEditor.h" | |||
| #include "jucer_OpenDocumentManager.h" | |||
| #include "../jucer_OpenDocumentManager.h" | |||
| //============================================================================== | |||
| @@ -26,8 +26,8 @@ | |||
| #ifndef __JUCER_SOURCECODEEDITOR_JUCEHEADER__ | |||
| #define __JUCER_SOURCECODEEDITOR_JUCEHEADER__ | |||
| #include "../model/jucer_Project.h" | |||
| #include "jucer_DocumentEditorComponent.h" | |||
| #include "../../model/Project/jucer_Project.h" | |||
| #include "../jucer_DocumentEditorComponent.h" | |||
| //============================================================================== | |||
| @@ -24,7 +24,12 @@ | |||
| */ | |||
| #include "../../jucer_Headers.h" | |||
| #include "../../model/Component/jucer_ComponentDocument.h" | |||
| #include "../jucer_JucerTreeViewBase.h" | |||
| #include "../Editor Base/jucer_EditorDragOperation.h" | |||
| #include "../Editor Base/jucer_EditorPanel.h" | |||
| #include "jucer_ComponentEditor.h" | |||
| #include "jucer_ComponentEditorCanvas.h" | |||
| #include "jucer_ComponentEditorTreeView.h" | |||
| #include "jucer_ComponentEditorCodeView.h" | |||
| #include "jucer_ComponentEditorToolbar.h" | |||
| @@ -61,132 +66,39 @@ private: | |||
| //============================================================================== | |||
| class ComponentEditor::LayoutEditorHolder : public Component | |||
| class ComponentEditor::LayoutEditorHolder : public EditorPanelBase | |||
| { | |||
| public: | |||
| LayoutEditorHolder (ComponentEditor& editor_) | |||
| : toolbarFactory (editor_), editor (editor_), infoPanel (0), tree (0) | |||
| : toolbarFactory (editor_), | |||
| editor (editor_) | |||
| { | |||
| addAndMakeVisible (toolbar = new Toolbar()); | |||
| toolbar->addDefaultItems (toolbarFactory); | |||
| toolbar->setStyle (Toolbar::textOnly); | |||
| addAndMakeVisible (viewport = new Viewport()); | |||
| addChildComponent (tree = new TreeView()); | |||
| tree->setRootItemVisible (true); | |||
| tree->setMultiSelectEnabled (true); | |||
| tree->setDefaultOpenness (true); | |||
| tree->setColour (TreeView::backgroundColourId, Colours::white); | |||
| tree->setIndentSize (15); | |||
| } | |||
| ~LayoutEditorHolder() | |||
| { | |||
| tree->deleteRootItem(); | |||
| deleteAndZero (infoPanel); | |||
| deleteAllChildren(); | |||
| shutdown(); | |||
| } | |||
| void createCanvas() | |||
| { | |||
| viewport->setViewedComponent (new ComponentEditorCanvas (editor)); | |||
| addAndMakeVisible (infoPanel = new InfoPanel (editor)); | |||
| tree->setRootItem (new ComponentEditorTreeView::Root (editor)); | |||
| resized(); | |||
| } | |||
| void resized() | |||
| { | |||
| const int toolbarHeight = 22; | |||
| toolbar->setBounds (0, 0, getWidth(), toolbarHeight); | |||
| int infoPanelWidth = 200; | |||
| if (infoPanel != 0 && infoPanel->isVisible()) | |||
| infoPanel->setBounds (getWidth() - infoPanelWidth, toolbar->getBottom(), infoPanelWidth, getHeight() - toolbar->getBottom()); | |||
| else | |||
| infoPanelWidth = 0; | |||
| if (tree->isVisible()) | |||
| { | |||
| tree->setBounds (0, toolbar->getBottom(), infoPanelWidth, getHeight() - toolbar->getBottom()); | |||
| viewport->setBounds (infoPanelWidth, toolbar->getBottom(), getWidth() - infoPanelWidth * 2, getHeight() - toolbar->getBottom()); | |||
| } | |||
| else | |||
| { | |||
| viewport->setBounds (0, toolbar->getBottom(), getWidth() - infoPanelWidth, getHeight() - toolbar->getBottom()); | |||
| } | |||
| initialise (new ComponentEditorCanvas (editor), toolbarFactory, | |||
| new ComponentEditorTreeView::Root (editor)); | |||
| } | |||
| void showOrHideProperties() | |||
| SelectedItemSet<String>& getSelection() | |||
| { | |||
| infoPanel->setVisible (! infoPanel->isVisible()); | |||
| resized(); | |||
| return editor.getSelection(); | |||
| } | |||
| void showOrHideTree() | |||
| void getSelectedItemProperties (Array<PropertyComponent*>& newComps) | |||
| { | |||
| tree->setVisible (! tree->isVisible()); | |||
| resized(); | |||
| editor.getSelectedItemProperties (newComps); | |||
| } | |||
| Viewport* getViewport() const { return viewport; } | |||
| private: | |||
| //============================================================================== | |||
| class InfoPanel : public Component, | |||
| public ChangeListener | |||
| { | |||
| public: | |||
| InfoPanel (ComponentEditor& editor_) | |||
| : editor (editor_) | |||
| { | |||
| setOpaque (true); | |||
| addAndMakeVisible (props = new PropertyPanel()); | |||
| editor.getCanvas()->getSelection().addChangeListener (this); | |||
| } | |||
| ~InfoPanel() | |||
| { | |||
| editor.getCanvas()->getSelection().removeChangeListener (this); | |||
| props->clear(); | |||
| deleteAllChildren(); | |||
| } | |||
| void changeListenerCallback (void*) | |||
| { | |||
| Array <PropertyComponent*> newComps; | |||
| editor.getCanvas()->getSelectedItemProperties (newComps); | |||
| props->clear(); | |||
| props->addProperties (newComps); | |||
| } | |||
| void paint (Graphics& g) | |||
| { | |||
| g.fillAll (Colour::greyLevel (0.92f)); | |||
| } | |||
| void resized() | |||
| { | |||
| props->setSize (getWidth(), getHeight()); | |||
| } | |||
| private: | |||
| ComponentEditor& editor; | |||
| PropertyPanel* props; | |||
| }; | |||
| Toolbar* toolbar; | |||
| ComponentEditorToolbarFactory toolbarFactory; | |||
| ComponentEditor& editor; | |||
| Viewport* viewport; | |||
| InfoPanel* infoPanel; | |||
| TreeView* tree; | |||
| }; | |||
| //============================================================================== | |||
| @@ -231,6 +143,7 @@ ComponentEditor::ComponentEditor (OpenDocumentManager::Document* document, | |||
| addAndMakeVisible (tabs = new TabbedComponent (TabbedButtonBar::TabsAtRight)); | |||
| tabs->setTabBarDepth (22); | |||
| tabs->setOutline (0); | |||
| tabs->addTab ("Class Settings", Colour::greyLevel (0.88f), classInfoHolder, true); | |||
| tabs->addTab ("Components", Colours::white, layoutEditorHolder, true); | |||
| @@ -255,18 +168,97 @@ void ComponentEditor::resized() | |||
| tabs->setBounds (getLocalBounds()); | |||
| } | |||
| ComponentEditorCanvas* ComponentEditor::getCanvas() const | |||
| const StringArray ComponentEditor::getSelectedIds() const | |||
| { | |||
| StringArray ids; | |||
| const int num = selection.getNumSelected(); | |||
| for (int i = 0; i < num; ++i) | |||
| ids.add (selection.getSelectedItem(i)); | |||
| return ids; | |||
| } | |||
| void ComponentEditor::getSelectedItemProperties (Array <PropertyComponent*>& props) | |||
| { | |||
| return dynamic_cast <ComponentEditorCanvas*> (getViewport()->getViewedComponent()); | |||
| getDocument().createItemProperties (props, getSelectedIds()); | |||
| } | |||
| void ComponentEditor::deleteSelection() | |||
| { | |||
| const StringArray ids (getSelectedIds()); | |||
| getSelection().deselectAll(); | |||
| getDocument().beginNewTransaction(); | |||
| for (int i = ids.size(); --i >= 0;) | |||
| { | |||
| const ValueTree comp (getDocument().getComponentWithID (ids[i])); | |||
| if (comp.isValid()) | |||
| getDocument().removeComponent (comp); | |||
| } | |||
| getDocument().beginNewTransaction(); | |||
| } | |||
| Viewport* ComponentEditor::getViewport() const | |||
| void ComponentEditor::deselectNonComponents() | |||
| { | |||
| return layoutEditorHolder->getViewport(); | |||
| EditorCanvasBase::SelectedItems& sel = getSelection(); | |||
| for (int i = sel.getNumSelected(); --i >= 0;) | |||
| if (! getDocument().getComponentWithID (sel.getSelectedItem (i)).isValid()) | |||
| sel.deselect (sel.getSelectedItem (i)); | |||
| } | |||
| void ComponentEditor::selectionToFront() | |||
| { | |||
| getDocument().beginNewTransaction(); | |||
| int index = 0; | |||
| for (int i = getDocument().getNumComponents(); --i >= 0;) | |||
| { | |||
| const ValueTree comp (getDocument().getComponent (index)); | |||
| if (comp.isValid() && getSelection().isSelected (comp [ComponentDocument::idProperty])) | |||
| { | |||
| ValueTree parent (comp.getParent()); | |||
| parent.moveChild (parent.indexOf (comp), -1, getDocument().getUndoManager()); | |||
| } | |||
| else | |||
| { | |||
| ++index; | |||
| } | |||
| } | |||
| getDocument().beginNewTransaction(); | |||
| } | |||
| void ComponentEditor::selectionToBack() | |||
| { | |||
| getDocument().beginNewTransaction(); | |||
| int index = getDocument().getNumComponents() - 1; | |||
| for (int i = getDocument().getNumComponents(); --i >= 0;) | |||
| { | |||
| const ValueTree comp (getDocument().getComponent (index)); | |||
| if (comp.isValid() && getSelection().isSelected (comp [ComponentDocument::idProperty])) | |||
| { | |||
| ValueTree parent (comp.getParent()); | |||
| parent.moveChild (parent.indexOf (comp), 0, getDocument().getUndoManager()); | |||
| } | |||
| else | |||
| { | |||
| --index; | |||
| } | |||
| } | |||
| getDocument().beginNewTransaction(); | |||
| } | |||
| //============================================================================== | |||
| class TestComponent : public ComponentEditorCanvas::ComponentHolder | |||
| class TestComponent : public Component | |||
| { | |||
| public: | |||
| TestComponent (ComponentDocument& document_) | |||
| @@ -278,6 +270,7 @@ public: | |||
| ~TestComponent() | |||
| { | |||
| deleteAllChildren(); | |||
| } | |||
| void resized() | |||
| @@ -285,8 +278,7 @@ public: | |||
| document.getCanvasWidth() = getWidth(); | |||
| document.getCanvasHeight() = getHeight(); | |||
| ComponentEditorCanvas::ComponentHolder::resized(); | |||
| updateComponents (document, selected); | |||
| ComponentEditorCanvas::updateComponentsIn (this, document, selected); | |||
| } | |||
| private: | |||
| @@ -383,11 +375,11 @@ bool ComponentEditor::perform (const InvocationInfo& info) | |||
| return true; | |||
| case CommandIDs::toFront: | |||
| getCanvas()->selectionToFront(); | |||
| selectionToFront(); | |||
| return true; | |||
| case CommandIDs::toBack: | |||
| getCanvas()->selectionToBack(); | |||
| selectionToBack(); | |||
| return true; | |||
| case CommandIDs::test: | |||
| @@ -403,7 +395,7 @@ bool ComponentEditor::perform (const InvocationInfo& info) | |||
| return true; | |||
| case StandardApplicationCommandIDs::del: | |||
| getCanvas()->deleteSelection(); | |||
| deleteSelection(); | |||
| return true; | |||
| default: | |||
| @@ -26,7 +26,9 @@ | |||
| #ifndef __JUCE_COMPONENTEDITOR_H_6CAE6B7E__ | |||
| #define __JUCE_COMPONENTEDITOR_H_6CAE6B7E__ | |||
| #include "jucer_ComponentEditorCanvas.h" | |||
| #include "../jucer_DocumentEditorComponent.h" | |||
| #include "../../model/Component/jucer_ComponentDocument.h" | |||
| #include "../Editor Base/jucer_EditorCanvas.h" | |||
| //============================================================================== | |||
| @@ -50,13 +52,21 @@ public: | |||
| void paint (Graphics& g); | |||
| void resized(); | |||
| //============================================================================== | |||
| ComponentDocument& getDocument() const { return *componentDocument; } | |||
| Viewport* getViewport() const; | |||
| ComponentEditorCanvas* getCanvas() const; | |||
| const StringArray getSelectedIds() const; | |||
| void getSelectedItemProperties (Array <PropertyComponent*>& props); | |||
| void deleteSelection(); | |||
| void deselectNonComponents(); | |||
| void selectionToFront(); | |||
| void selectionToBack(); | |||
| //============================================================================== | |||
| void test(); | |||
| EditorCanvasBase::SelectedItems& getSelection() { return selection; } | |||
| private: | |||
| class ClassInfoHolder; | |||
| class LayoutEditorHolder; | |||
| @@ -65,6 +75,7 @@ private: | |||
| Project* project; | |||
| ComponentDocument* componentDocument; | |||
| EditorCanvasBase::SelectedItems selection; | |||
| TabbedComponent* tabs; | |||
| ClassInfoHolder* classInfoHolder; | |||
| @@ -26,112 +26,247 @@ | |||
| #ifndef __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__ | |||
| #define __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__ | |||
| #include "../../model/jucer_ComponentDocument.h" | |||
| #include "../jucer_DocumentEditorComponent.h" | |||
| class ComponentEditor; | |||
| //============================================================================== | |||
| class ComponentEditorCanvas : public Component, | |||
| public ValueTree::Listener, | |||
| class ComponentEditorCanvas : public EditorCanvasBase, | |||
| public Timer | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| ComponentEditorCanvas (ComponentEditor& editor_); | |||
| ~ComponentEditorCanvas(); | |||
| ComponentEditorCanvas (ComponentEditor& editor_) | |||
| : editor (editor_) | |||
| { | |||
| initialise(); | |||
| getDocument().getRoot().addListener (this); | |||
| } | |||
| //============================================================================== | |||
| ComponentEditor& getEditor(); | |||
| ComponentDocument& getDocument(); | |||
| ~ComponentEditorCanvas() | |||
| { | |||
| getDocument().getRoot().removeListener (this); | |||
| shutdown(); | |||
| } | |||
| typedef SelectedItemSet<String> SelectedItems; | |||
| SelectedItems& getSelection(); | |||
| ComponentEditor& getEditor() { return editor; } | |||
| ComponentDocument& getDocument() { return editor.getDocument(); } | |||
| class ComponentHolder; | |||
| ComponentHolder* getComponentHolder() const; | |||
| void timerCallback() | |||
| { | |||
| stopTimer(); | |||
| //============================================================================== | |||
| void timerCallback(); | |||
| void paint (Graphics& g); | |||
| void resized(); | |||
| if (! Component::isMouseButtonDownAnywhere()) | |||
| getDocument().beginNewTransaction(); | |||
| } | |||
| void updateComponents(); | |||
| const Rectangle<int> getContentArea() const; | |||
| void drawXAxis (Graphics& g, const Rectangle<int>& r); | |||
| void drawYAxis (Graphics& g, const Rectangle<int>& r); | |||
| static Component* findComponentForState (Component* compHolder, ComponentDocument& doc, const ValueTree& state) | |||
| { | |||
| for (int i = compHolder->getNumChildComponents(); --i >= 0;) | |||
| { | |||
| Component* const c = compHolder->getChildComponent (i); | |||
| if (doc.isStateForComponent (state, c)) | |||
| return c; | |||
| } | |||
| //============================================================================== | |||
| void valueTreePropertyChanged (ValueTree&, const var::identifier&) { updateComponents(); } | |||
| void valueTreeChildrenChanged (ValueTree& treeWhoseChildHasChanged) { updateComponents(); } | |||
| void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) {} | |||
| return 0; | |||
| } | |||
| //============================================================================== | |||
| const StringArray getSelectedIds() const; | |||
| void getSelectedItemProperties (Array <PropertyComponent*>& props); | |||
| void deleteSelection(); | |||
| void deselectNonComponents(); | |||
| void selectionToFront(); | |||
| void selectionToBack(); | |||
| static void updateComponentsIn (Component* compHolder, ComponentDocument& doc, SelectedItems& selection) | |||
| { | |||
| int i; | |||
| for (i = compHolder->getNumChildComponents(); --i >= 0;) | |||
| { | |||
| Component* c = compHolder->getChildComponent (i); | |||
| if (! doc.containsComponent (c)) | |||
| { | |||
| selection.deselect (ComponentDocument::getJucerIDFor (c)); | |||
| delete c; | |||
| } | |||
| } | |||
| Array <Component*> componentsInOrder; | |||
| const int num = doc.getNumComponents(); | |||
| for (i = 0; i < num; ++i) | |||
| { | |||
| const ValueTree v (doc.getComponent (i)); | |||
| Component* c = findComponentForState (compHolder, doc, v); | |||
| if (c == 0) | |||
| { | |||
| c = doc.createComponent (i); | |||
| compHolder->addAndMakeVisible (c); | |||
| } | |||
| doc.updateComponent (c); | |||
| componentsInOrder.add (c); | |||
| } | |||
| // Make sure the z-order is correct.. | |||
| if (num > 0) | |||
| { | |||
| componentsInOrder.getLast()->toFront (false); | |||
| for (i = num - 1; --i >= 0;) | |||
| componentsInOrder.getUnchecked(i)->toBehind (componentsInOrder.getUnchecked (i + 1)); | |||
| } | |||
| } | |||
| void updateComponents() | |||
| { | |||
| updateComponentsIn (getComponentHolder(), getDocument(), editor.getSelection()); | |||
| startTimer (500); | |||
| } | |||
| //============================================================================== | |||
| void showSizeGuides(); | |||
| void hideSizeGuides(); | |||
| int getCanvasWidth() { return getDocument().getCanvasWidth().getValue(); } | |||
| int getCanvasHeight() { return getDocument().getCanvasHeight().getValue(); } | |||
| void setCanvasWidth (int w) { getDocument().getCanvasWidth() = w; } | |||
| void setCanvasHeight (int h) { getDocument().getCanvasHeight() = h; } | |||
| //============================================================================== | |||
| class DragOperation; | |||
| ComponentDocument::MarkerList& getMarkerList (bool isX) | |||
| { | |||
| return getDocument().getMarkerList (isX); | |||
| } | |||
| const SelectedItems::ItemType findObjectIdAt (const Point<int>& position) | |||
| { | |||
| for (int i = getComponentHolder()->getNumChildComponents(); --i >= 0;) | |||
| { | |||
| Component* const c = getComponentHolder()->getChildComponent(i); | |||
| if (c->getBounds().contains (position)) | |||
| return ComponentDocument::getJucerIDFor (c); | |||
| } | |||
| void beginDrag (const MouseEvent& e, const ResizableBorderComponent::Zone& zone); | |||
| void continueDrag (const MouseEvent& e); | |||
| void endDrag (const MouseEvent& e); | |||
| return String::empty; | |||
| } | |||
| //============================================================================== | |||
| class ComponentHolder : public Component | |||
| void showPopupMenu (const Point<int>& position) | |||
| { | |||
| public: | |||
| ComponentHolder(); | |||
| ~ComponentHolder(); | |||
| void updateComponents (ComponentDocument& doc, SelectedItems& selection); | |||
| Component* getComponentForState (ComponentDocument& doc, const ValueTree& state) const; | |||
| Component* findComponentWithID (const String& uid) const; | |||
| Component* findComponentAt (const Point<int>& pos) const; | |||
| void findLassoItemsInArea (Array <SelectedItems::ItemType>& itemsFound, const Rectangle<int>& lassoArea); | |||
| }; | |||
| PopupMenu m; | |||
| if (findObjectIdAt (position).isNotEmpty()) | |||
| { | |||
| m.addCommandItem (commandManager, CommandIDs::toFront); | |||
| m.addCommandItem (commandManager, CommandIDs::toBack); | |||
| m.addSeparator(); | |||
| m.addCommandItem (commandManager, StandardApplicationCommandIDs::del); | |||
| const int r = m.show(); | |||
| (void) r; | |||
| } | |||
| else | |||
| { | |||
| getDocument().addNewComponentMenuItems (m); | |||
| const int r = m.show(); | |||
| getDocument().performNewComponentMenuItem (r); | |||
| } | |||
| } | |||
| const ValueTree getObjectState (const String& objectId) | |||
| { | |||
| return getDocument().getComponentWithID (objectId); | |||
| } | |||
| private: | |||
| ComponentEditor& editor; | |||
| const BorderSize border; | |||
| ScopedPointer <DragOperation> dragger; | |||
| const Rectangle<int> getObjectPosition (const ValueTree& state) | |||
| { | |||
| return getDocument().getCoordsFor (state).resolve (getDocument()); | |||
| } | |||
| RectangleCoordinates getObjectCoords (const ValueTree& state) | |||
| { | |||
| return getDocument().getCoordsFor (state); | |||
| } | |||
| SelectedItems& getSelection() | |||
| { | |||
| return editor.getSelection(); | |||
| } | |||
| void deselectNonDraggableObjects() | |||
| { | |||
| editor.deselectNonComponents(); | |||
| } | |||
| void findLassoItemsInArea (Array <SelectedItems::ItemType>& itemsFound, const Rectangle<int>& area) | |||
| { | |||
| for (int i = getComponentHolder()->getNumChildComponents(); --i >= 0;) | |||
| { | |||
| Component* c = getComponentHolder()->getChildComponent(i); | |||
| if (c->getBounds().intersects (area)) | |||
| itemsFound.add (ComponentDocument::getJucerIDFor (c)); | |||
| } | |||
| } | |||
| //============================================================================== | |||
| class OverlayItemComponent : public Component | |||
| class DragOperation : public EditorDragOperation | |||
| { | |||
| public: | |||
| OverlayItemComponent (ComponentEditorCanvas& canvas_); | |||
| DragOperation (ComponentEditorCanvas* canvas_, | |||
| const MouseEvent& e, | |||
| Component* snapGuideParentComp_, | |||
| const ResizableBorderComponent::Zone& zone_) | |||
| : EditorDragOperation (canvas_, e, snapGuideParentComp_, zone_) | |||
| { | |||
| } | |||
| ~DragOperation() | |||
| { | |||
| getUndoManager().beginNewTransaction(); | |||
| } | |||
| protected: | |||
| ComponentDocument& getDocument() throw() { return static_cast <ComponentEditorCanvas*> (canvas)->getDocument(); } | |||
| void setBoundsInTargetSpace (const Rectangle<int>& r); | |||
| int getCanvasWidth() { return getDocument().getCanvasWidth().getValue(); } | |||
| int getCanvasHeight() { return getDocument().getCanvasHeight().getValue(); } | |||
| ComponentDocument& getDocument() { return canvas.getDocument(); } | |||
| UndoManager& getUndoManager() { return *getDocument().getUndoManager(); } | |||
| protected: | |||
| ComponentEditorCanvas& canvas; | |||
| const Rectangle<float> getObjectPosition (const ValueTree& state) | |||
| { | |||
| ComponentDocument& doc = getDocument(); | |||
| RectangleCoordinates relativePos (doc.getCoordsFor (state)); | |||
| const Rectangle<int> intPos (relativePos.resolve (doc)); | |||
| return intPos.toFloat(); | |||
| } | |||
| bool setObjectPosition (ValueTree& state, const Rectangle<float>& newBounds) | |||
| { | |||
| ComponentDocument& doc = getDocument(); | |||
| RectangleCoordinates pr (doc.getCoordsFor (state)); | |||
| pr.moveToAbsolute (newBounds, doc); | |||
| return doc.setCoordsFor (state, pr); | |||
| } | |||
| }; | |||
| friend class OverlayItemComponent; | |||
| class ComponentResizeFrame; | |||
| class MarkerComponent; | |||
| class DocumentResizerFrame; | |||
| class OverlayComponent; | |||
| DragOperation* createDragOperation (const MouseEvent& e, Component* snapGuideParentComponent, | |||
| const ResizableBorderComponent::Zone& zone) | |||
| { | |||
| DragOperation* d = new DragOperation (this, e, snapGuideParentComponent, zone); | |||
| Array<ValueTree> selected, unselected; | |||
| //============================================================================== | |||
| ComponentHolder* componentHolder; | |||
| OverlayComponent* overlay; | |||
| DocumentResizerFrame* resizeFrame; | |||
| SelectedItems selection; | |||
| for (int i = getDocument().getNumComponents(); --i >= 0;) | |||
| { | |||
| const ValueTree v (getDocument().getComponent (i)); | |||
| if (editor.getSelection().isSelected (v [ComponentDocument::idProperty])) | |||
| selected.add (v); | |||
| else | |||
| unselected.add (v); | |||
| } | |||
| d->initialise (selected, unselected); | |||
| return d; | |||
| } | |||
| const Array<Component*> getSelectedComps() const; | |||
| const Array<Component*> getUnselectedComps() const; | |||
| UndoManager& getUndoManager() | |||
| { | |||
| return *getDocument().getUndoManager(); | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| ComponentEditor& editor; | |||
| }; | |||
| @@ -27,6 +27,7 @@ | |||
| #define __JUCER_COMPONENTEDITORTOOLBAR_H_6B5CA931__ | |||
| //============================================================================== | |||
| class ComponentEditorToolbarFactory : public ToolbarItemFactory | |||
| { | |||
| public: | |||
| @@ -26,8 +26,6 @@ | |||
| #ifndef __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__ | |||
| #define __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__ | |||
| #include "../jucer_JucerTreeViewBase.h" | |||
| //============================================================================== | |||
| namespace ComponentEditorTreeView | |||
| @@ -41,12 +39,12 @@ namespace ComponentEditorTreeView | |||
| Base (ComponentEditor& editor_) | |||
| : editor (editor_) | |||
| { | |||
| editor.getCanvas()->getSelection().addChangeListener (this); | |||
| editor.getSelection().addChangeListener (this); | |||
| } | |||
| ~Base() | |||
| { | |||
| editor.getCanvas()->getSelection().removeChangeListener (this); | |||
| editor.getSelection().removeChangeListener (this); | |||
| } | |||
| //============================================================================== | |||
| @@ -78,16 +76,16 @@ namespace ComponentEditorTreeView | |||
| void itemSelectionChanged (bool isNowSelected) | |||
| { | |||
| if (isNowSelected) | |||
| editor.getCanvas()->getSelection().addToSelection (getItemId()); | |||
| editor.getSelection().addToSelection (getItemId()); | |||
| else | |||
| editor.getCanvas()->getSelection().deselect (getItemId()); | |||
| editor.getSelection().deselect (getItemId()); | |||
| } | |||
| void changeListenerCallback (void*) { updateSelectionState(); } | |||
| void updateSelectionState() | |||
| { | |||
| setSelected (editor.getCanvas()->getSelection().isSelected (getItemId()), false); | |||
| setSelected (editor.getSelection().isSelected (getItemId()), false); | |||
| } | |||
| bool isMissing() { return false; } | |||
| @@ -204,13 +202,13 @@ namespace ComponentEditorTreeView | |||
| } | |||
| //============================================================================== | |||
| const String getItemId() const { return markerState [ComponentDocument::idProperty]; } | |||
| const String getItemId() const { return MarkerListBase::getId (markerState); } | |||
| bool mightContainSubItems() { return false; } | |||
| void refreshSubItems() {} | |||
| const String getDisplayName() const { return getRenamingName(); } | |||
| const String getRenamingName() const { return markerState [ComponentDocument::markerNameProperty]; } | |||
| const String getRenamingName() const { return markerState [MarkerListBase::getMarkerNameProperty()]; } | |||
| Image* getIcon() const { return LookAndFeel::getDefaultLookAndFeel().getDefaultDocumentFileImage(); } | |||
| @@ -218,7 +216,7 @@ namespace ComponentEditorTreeView | |||
| void valueTreePropertyChanged (ValueTree& tree, const var::identifier& property) | |||
| { | |||
| if (property == ComponentDocument::markerNameProperty) | |||
| if (property == MarkerListBase::getMarkerNameProperty()) | |||
| repaintItem(); | |||
| } | |||
| @@ -24,49 +24,51 @@ | |||
| */ | |||
| #include "../../jucer_Headers.h" | |||
| #include "jucer_DrawableObjectComponent.h" | |||
| #include "jucer_DrawableEditor.h" | |||
| #include "../../model/Drawable/jucer_DrawableDocument.h" | |||
| #include "../jucer_JucerTreeViewBase.h" | |||
| #include "jucer_DrawableTreeViewItem.h" | |||
| #include "../Editor Base/jucer_EditorDragOperation.h" | |||
| #include "../Editor Base/jucer_EditorPanel.h" | |||
| #include "../Editor Base/jucer_EditorCanvas.h" | |||
| #include "jucer_DrawableEditor.h" | |||
| #include "jucer_DrawableEditorCanvas.h" | |||
| #include "jucer_DrawableEditorTreeView.h" | |||
| #include "jucer_DrawableEditorToolbar.h" | |||
| //============================================================================== | |||
| class RightHandPanel : public Component | |||
| class DrawableEditor::Panel : public EditorPanelBase | |||
| { | |||
| public: | |||
| RightHandPanel (DrawableEditor& editor_) | |||
| : editor (editor_) | |||
| Panel (DrawableEditor& editor_) | |||
| : toolbarFactory (editor_), | |||
| editor (editor_) | |||
| { | |||
| setOpaque (true); | |||
| addAndMakeVisible (tree = new TreeView()); | |||
| tree->setRootItemVisible (true); | |||
| tree->setMultiSelectEnabled (true); | |||
| tree->setDefaultOpenness (true); | |||
| tree->setColour (TreeView::backgroundColourId, Colours::white); | |||
| tree->setIndentSize (15); | |||
| tree->setRootItem (DrawableTreeViewItem::createItemForNode (editor, editor.getDocument().getRootDrawableNode())); | |||
| } | |||
| ~RightHandPanel() | |||
| ~Panel() | |||
| { | |||
| tree->deleteRootItem(); | |||
| deleteAllChildren(); | |||
| shutdown(); | |||
| } | |||
| void paint (Graphics& g) | |||
| void createCanvas() | |||
| { | |||
| g.fillAll (Colour::greyLevel (0.92f)); | |||
| initialise (new DrawableEditorCanvas (editor), toolbarFactory, | |||
| DrawableTreeViewItem::createItemForNode (editor, editor.getDocument().getRootDrawableNode())); | |||
| } | |||
| void resized() | |||
| SelectedItemSet<String>& getSelection() | |||
| { | |||
| tree->setSize (getWidth(), getHeight()); | |||
| return editor.getSelection(); | |||
| } | |||
| void getSelectedItemProperties (Array<PropertyComponent*>& newComps) | |||
| { | |||
| //editor.getSelectedItemProperties (newComps); | |||
| } | |||
| private: | |||
| DrawableEditorToolbarFactory toolbarFactory; | |||
| DrawableEditor& editor; | |||
| TreeView* tree; | |||
| }; | |||
| //============================================================================== | |||
| @@ -81,12 +83,8 @@ DrawableEditor::DrawableEditor (OpenDocumentManager::Document* document, | |||
| setOpaque (true); | |||
| addAndMakeVisible (rightHandPanel = new RightHandPanel (*this)); | |||
| Canvas* canvas = new Canvas (*this); | |||
| addAndMakeVisible (viewport = new Viewport()); | |||
| viewport->setViewedComponent (canvas); | |||
| canvas->createRootObject(); | |||
| addAndMakeVisible (panel = new Panel (*this)); | |||
| panel->createCanvas(); | |||
| } | |||
| DrawableEditor::~DrawableEditor() | |||
| @@ -94,11 +92,6 @@ DrawableEditor::~DrawableEditor() | |||
| deleteAllChildren(); | |||
| } | |||
| int64 DrawableEditor::getHashForNode (const ValueTree& node) | |||
| { | |||
| return node ["id"].toString().hashCode64(); | |||
| } | |||
| void DrawableEditor::paint (Graphics& g) | |||
| { | |||
| g.fillAll (Colours::white); | |||
| @@ -106,117 +99,5 @@ void DrawableEditor::paint (Graphics& g) | |||
| void DrawableEditor::resized() | |||
| { | |||
| rightHandPanel->setBounds (getWidth() - 200, 0, 200, getHeight()); | |||
| viewport->setBounds (0, 0, rightHandPanel->getX(), getHeight()); | |||
| getCanvas()->updateSize(); | |||
| } | |||
| //============================================================================== | |||
| DrawableEditor::Canvas::Canvas (DrawableEditor& editor_) | |||
| : editor (editor_), border (40) | |||
| { | |||
| origin.setXY (50, 50); | |||
| } | |||
| DrawableEditor::Canvas::~Canvas() | |||
| { | |||
| rootObject = 0; | |||
| } | |||
| void DrawableEditor::Canvas::createRootObject() | |||
| { | |||
| addAndMakeVisible (rootObject = DrawableObjectComponent::create (editor.getDocument().getRootDrawableNode(), | |||
| editor, 0)); | |||
| rootObject->drawableOriginRelativeToParentTopLeft = origin; | |||
| rootObject->reloadFromValueTree(); | |||
| } | |||
| void DrawableEditor::Canvas::paint (Graphics& g) | |||
| { | |||
| /* g.setColour (Colours::lightgrey); | |||
| g.fillRect (0, border.getTop() - 1, getWidth(), 1); | |||
| g.fillRect (0, getHeight() - border.getBottom(), getWidth(), 1); | |||
| g.fillRect (border.getLeft() - 1, 0, 1, getHeight()); | |||
| g.fillRect (getWidth() - border.getRight(), 0, 1, getHeight());*/ | |||
| g.setColour (Colours::grey); | |||
| g.fillRect (0, origin.getY(), getWidth(), 1); | |||
| g.fillRect (origin.getX(), 0, 1, getHeight()); | |||
| } | |||
| void DrawableEditor::Canvas::mouseDown (const MouseEvent& e) | |||
| { | |||
| lasso = 0; | |||
| if (e.mods.isPopupMenu()) | |||
| { | |||
| PopupMenu m; | |||
| m.addItem (1, "New Rectangle"); | |||
| m.addItem (2, "New Circle"); | |||
| switch (m.show()) | |||
| { | |||
| case 1: | |||
| editor.getDocument().addRectangle(); | |||
| break; | |||
| case 2: | |||
| editor.getDocument().addCircle(); | |||
| break; | |||
| default: | |||
| break; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| addAndMakeVisible (lasso = new LassoComponent <int64>()); | |||
| lasso->beginLasso (e, this); | |||
| } | |||
| } | |||
| void DrawableEditor::Canvas::mouseDrag (const MouseEvent& e) | |||
| { | |||
| if (lasso != 0) | |||
| lasso->dragLasso (e); | |||
| } | |||
| void DrawableEditor::Canvas::mouseUp (const MouseEvent& e) | |||
| { | |||
| if (lasso != 0) | |||
| { | |||
| lasso->endLasso(); | |||
| lasso = 0; | |||
| } | |||
| } | |||
| void DrawableEditor::Canvas::findLassoItemsInArea (Array <int64>& itemsFound, const Rectangle<int>& area) | |||
| { | |||
| for (int i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| DrawableObjectComponent* d = dynamic_cast <DrawableObjectComponent*> (getChildComponent(i)); | |||
| if (d != 0) | |||
| d->findLassoItemsInArea (itemsFound, area); | |||
| } | |||
| } | |||
| SelectedItemSet <int64>& DrawableEditor::Canvas::getLassoSelection() | |||
| { | |||
| return editor.selectedItems; | |||
| } | |||
| void DrawableEditor::Canvas::updateSize() | |||
| { | |||
| Rectangle<int> r (rootObject->getBounds()); | |||
| setSize (jmax (editor.viewport->getMaximumVisibleWidth(), r.getRight()), | |||
| jmax (editor.viewport->getMaximumVisibleHeight(), r.getBottom())); | |||
| } | |||
| void DrawableEditor::Canvas::childBoundsChanged (Component* child) | |||
| { | |||
| if (child == rootObject) | |||
| updateSize(); | |||
| panel->setBounds (getLocalBounds()); | |||
| } | |||
| @@ -27,7 +27,8 @@ | |||
| #define __JUCER_DRAWABLEEDITOR_JUCEHEADER__ | |||
| #include "../jucer_DocumentEditorComponent.h" | |||
| class DrawableObjectComponent; | |||
| #include "../Editor Base/jucer_EditorCanvas.h" | |||
| class DrawableEditorCanvas; | |||
| //============================================================================== | |||
| @@ -38,8 +39,7 @@ class DrawableEditor : public DocumentEditorComponent | |||
| public: | |||
| //============================================================================== | |||
| DrawableEditor (OpenDocumentManager::Document* document, | |||
| Project* project, | |||
| DrawableDocument* drawableDocument); | |||
| Project* project, DrawableDocument* drawableDocument); | |||
| ~DrawableEditor(); | |||
| void paint (Graphics& g); | |||
| @@ -47,51 +47,19 @@ public: | |||
| DrawableDocument& getDocument() const { return *drawableDocument; } | |||
| static int64 getHashForNode (const ValueTree& node); | |||
| EditorCanvasBase::SelectedItems& getSelection() { return selection; } | |||
| //============================================================================== | |||
| class Canvas : public Component, | |||
| public LassoSource <int64> | |||
| { | |||
| public: | |||
| Canvas (DrawableEditor& editor_); | |||
| ~Canvas(); | |||
| void createRootObject(); | |||
| const Point<int> getOrigin() const throw() { return origin; } | |||
| void paint (Graphics& g); | |||
| void mouseDown (const MouseEvent& e); | |||
| void mouseDrag (const MouseEvent& e); | |||
| void mouseUp (const MouseEvent& e); | |||
| void childBoundsChanged (Component* child); | |||
| void updateSize(); | |||
| void findLassoItemsInArea (Array <int64>& itemsFound, const Rectangle<int>& area); | |||
| SelectedItemSet <int64>& getLassoSelection(); | |||
| private: | |||
| DrawableEditor& editor; | |||
| ScopedPointer <DrawableObjectComponent> rootObject; | |||
| ScopedPointer <LassoComponent <int64> > lasso; | |||
| BorderSize border; | |||
| Point<int> origin; | |||
| }; | |||
| Canvas* getCanvas() const { return static_cast <Canvas*> (viewport->getViewedComponent()); } | |||
| SelectedItemSet <int64> selectedItems; | |||
| class Panel; | |||
| //============================================================================== | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| friend class Canvas; | |||
| Project* project; | |||
| DrawableDocument* drawableDocument; | |||
| EditorCanvasBase::SelectedItems selection; | |||
| Viewport* viewport; | |||
| Component* rightHandPanel; | |||
| Panel* panel; | |||
| }; | |||
| @@ -0,0 +1,199 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCER_DRAWABLEOBJECTCOMPONENT_JUCEHEADER__ | |||
| #define __JUCER_DRAWABLEOBJECTCOMPONENT_JUCEHEADER__ | |||
| #include "jucer_DrawableEditor.h" | |||
| //============================================================================== | |||
| class DrawableEditorCanvas : public EditorCanvasBase, | |||
| public Timer | |||
| { | |||
| public: | |||
| DrawableEditorCanvas (DrawableEditor& editor_) | |||
| : editor (editor_) | |||
| { | |||
| initialise(); | |||
| editor.getDocument().getRoot().addListener (this); | |||
| } | |||
| ~DrawableEditorCanvas() | |||
| { | |||
| editor.getDocument().getRoot().removeListener (this); | |||
| shutdown(); | |||
| } | |||
| void updateComponents() | |||
| { | |||
| startTimer (500); | |||
| } | |||
| int getCanvasWidth() { return getDocument().getCanvasWidth().getValue(); } | |||
| int getCanvasHeight() { return getDocument().getCanvasHeight().getValue(); } | |||
| void setCanvasWidth (int w) { getDocument().getCanvasWidth() = w; } | |||
| void setCanvasHeight (int h) { getDocument().getCanvasHeight() = h; } | |||
| MarkerListBase& getMarkerList (bool isX) | |||
| { | |||
| return getDocument().getMarkerList (isX); | |||
| } | |||
| const SelectedItems::ItemType findObjectIdAt (const Point<int>& position) | |||
| { | |||
| return String::empty; | |||
| } | |||
| void showPopupMenu (const Point<int>& position) | |||
| { | |||
| PopupMenu m; | |||
| if (findObjectIdAt (position).isNotEmpty()) | |||
| { | |||
| m.addCommandItem (commandManager, CommandIDs::toFront); | |||
| m.addCommandItem (commandManager, CommandIDs::toBack); | |||
| m.addSeparator(); | |||
| m.addCommandItem (commandManager, StandardApplicationCommandIDs::del); | |||
| const int r = m.show(); | |||
| (void) r; | |||
| } | |||
| else | |||
| { | |||
| // getDocument().addNewComponentMenuItems (m); | |||
| // const int r = m.show(); | |||
| // getDocument().performNewComponentMenuItem (r); | |||
| } | |||
| } | |||
| const ValueTree getObjectState (const String& objectId) | |||
| { | |||
| return ValueTree(); | |||
| } | |||
| const Rectangle<int> getObjectPosition (const ValueTree& state) | |||
| { | |||
| return Rectangle<int>();//getDocument().getCoordsFor (state).resolve (getDocument()); | |||
| } | |||
| RectangleCoordinates getObjectCoords (const ValueTree& state) | |||
| { | |||
| return RectangleCoordinates(); | |||
| // return getDocument().getCoordsFor (state); | |||
| } | |||
| SelectedItems& getSelection() | |||
| { | |||
| return editor.getSelection(); | |||
| } | |||
| void deselectNonDraggableObjects() | |||
| { | |||
| } | |||
| void findLassoItemsInArea (Array <SelectedItems::ItemType>& itemsFound, const Rectangle<int>& area) | |||
| { | |||
| } | |||
| //============================================================================== | |||
| class DragOperation : public EditorDragOperation | |||
| { | |||
| public: | |||
| DragOperation (DrawableEditorCanvas* canvas_, | |||
| const MouseEvent& e, | |||
| Component* snapGuideParentComp_, | |||
| const ResizableBorderComponent::Zone& zone_) | |||
| : EditorDragOperation (canvas_, e, snapGuideParentComp_, zone_) | |||
| { | |||
| } | |||
| ~DragOperation() | |||
| { | |||
| getUndoManager().beginNewTransaction(); | |||
| } | |||
| protected: | |||
| DrawableDocument& getDocument() throw() { return static_cast <DrawableEditorCanvas*> (canvas)->getDocument(); } | |||
| int getCanvasWidth() { return getDocument().getCanvasWidth().getValue(); } | |||
| int getCanvasHeight() { return getDocument().getCanvasHeight().getValue(); } | |||
| UndoManager& getUndoManager() { return *getDocument().getUndoManager(); } | |||
| const Rectangle<float> getObjectPosition (const ValueTree& state) | |||
| { | |||
| return Rectangle<float> (); | |||
| } | |||
| bool setObjectPosition (ValueTree& state, const Rectangle<float>& newBounds) | |||
| { | |||
| return false; | |||
| } | |||
| }; | |||
| DragOperation* createDragOperation (const MouseEvent& e, Component* snapGuideParentComponent, | |||
| const ResizableBorderComponent::Zone& zone) | |||
| { | |||
| DragOperation* d = new DragOperation (this, e, snapGuideParentComponent, zone); | |||
| Array<ValueTree> selected, unselected; | |||
| /*for (int i = getDocument().getNumComponents(); --i >= 0;) | |||
| { | |||
| const ValueTree v (getDocument().getComponent (i)); | |||
| if (editor.getSelection().isSelected (v [ComponentDocument::idProperty])) | |||
| selected.add (v); | |||
| else | |||
| unselected.add (v); | |||
| }*/ | |||
| d->initialise (selected, unselected); | |||
| return d; | |||
| } | |||
| UndoManager& getUndoManager() | |||
| { | |||
| return *getDocument().getUndoManager(); | |||
| } | |||
| DrawableDocument& getDocument() throw() { return editor.getDocument(); } | |||
| void timerCallback() | |||
| { | |||
| stopTimer(); | |||
| if (! Component::isMouseButtonDownAnywhere()) | |||
| getUndoManager().beginNewTransaction(); | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| DrawableEditor& editor; | |||
| }; | |||
| #endif // __JUCER_DRAWABLEOBJECTCOMPONENT_JUCEHEADER__ | |||
| @@ -0,0 +1,92 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCER_DRAWABLEEDITORTOOLBAR_H_65D23CDD__ | |||
| #define __JUCER_DRAWABLEEDITORTOOLBAR_H_65D23CDD__ | |||
| //============================================================================== | |||
| class DrawableEditorToolbarFactory : public ToolbarItemFactory | |||
| { | |||
| public: | |||
| DrawableEditorToolbarFactory (DrawableEditor& editor_) | |||
| : editor (editor_) | |||
| { | |||
| } | |||
| ~DrawableEditorToolbarFactory() | |||
| { | |||
| } | |||
| //============================================================================== | |||
| enum DemoToolbarItemIds | |||
| { | |||
| createComponent = 1, | |||
| showInfo = 2, | |||
| showComponentTree = 3, | |||
| }; | |||
| void getAllToolbarItemIds (Array <int>& ids) | |||
| { | |||
| ids.add (showInfo); | |||
| ids.add (showComponentTree); | |||
| ids.add (separatorBarId); | |||
| ids.add (spacerId); | |||
| ids.add (flexibleSpacerId); | |||
| } | |||
| void getDefaultItemSet (Array <int>& ids) | |||
| { | |||
| ids.add (spacerId); | |||
| ids.add (flexibleSpacerId); | |||
| ids.add (showComponentTree); | |||
| ids.add (showInfo); | |||
| ids.add (spacerId); | |||
| } | |||
| ToolbarItemComponent* createItem (int itemId) | |||
| { | |||
| String name; | |||
| int commandId = 0; | |||
| switch (itemId) | |||
| { | |||
| case showInfo: name = "info"; commandId = CommandIDs::showOrHideProperties; break; | |||
| case showComponentTree: name = "tree"; commandId = CommandIDs::showOrHideTree; break; | |||
| default: jassertfalse; return 0; | |||
| } | |||
| ToolbarButton* b = new ToolbarButton (itemId, name, new DrawablePath(), 0); | |||
| b->setCommandToTrigger (commandManager, commandId, true); | |||
| return b; | |||
| } | |||
| private: | |||
| DrawableEditor& editor; | |||
| }; | |||
| #endif // __JUCER_DRAWABLEEDITORTOOLBAR_H_65D23CDD__ | |||
| @@ -26,9 +26,6 @@ | |||
| #ifndef __JUCER_DRAWABLETREEVIEWITEM_JUCEHEADER__ | |||
| #define __JUCER_DRAWABLETREEVIEWITEM_JUCEHEADER__ | |||
| #include "../jucer_DocumentEditorComponent.h" | |||
| #include "../../model/jucer_DrawableDocument.h" | |||
| //============================================================================== | |||
| /** | |||
| @@ -41,7 +38,7 @@ class DrawableTreeViewItem : public JucerTreeViewBase, | |||
| : editor (editor_), node (drawableRoot), typeName (typeName_) | |||
| { | |||
| node.addListener (this); | |||
| editor.selectedItems.addChangeListener (this); | |||
| editor.getSelection().addChangeListener (this); | |||
| } | |||
| public: | |||
| @@ -77,7 +74,7 @@ public: | |||
| ~DrawableTreeViewItem() | |||
| { | |||
| editor.selectedItems.removeChangeListener (this); | |||
| editor.getSelection().removeChangeListener (this); | |||
| node.removeListener (this); | |||
| } | |||
| @@ -133,7 +130,7 @@ public: | |||
| if (openness != 0) | |||
| restoreOpennessState (*openness); | |||
| editor.selectedItems.changed(); | |||
| editor.getSelection().changed(); | |||
| } | |||
| const String getDisplayName() const | |||
| @@ -169,23 +166,17 @@ public: | |||
| void itemSelectionChanged (bool isNowSelected) | |||
| { | |||
| DrawableEditor* ed = getEditor(); | |||
| jassert (ed != 0); | |||
| if (ed != 0) | |||
| { | |||
| const int64 hash = DrawableEditor::getHashForNode (node); | |||
| const String objectId (DrawableDocument::getIdFor (node)); | |||
| if (isNowSelected) | |||
| ed->selectedItems.addToSelection (hash); | |||
| else | |||
| ed->selectedItems.deselect (hash); | |||
| } | |||
| if (isNowSelected) | |||
| editor.getSelection().addToSelection (objectId); | |||
| else | |||
| editor.getSelection().deselect (objectId); | |||
| } | |||
| void changeListenerCallback (void*) | |||
| { | |||
| setSelected (editor.selectedItems.isSelected (DrawableEditor::getHashForNode (node)), false); | |||
| setSelected (editor.getSelection().isSelected (DrawableDocument::getIdFor (node)), false); | |||
| } | |||
| const String getTooltip() | |||
| @@ -1,322 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCER_DRAWABLEOBJECTCOMPONENT_JUCEHEADER__ | |||
| #define __JUCER_DRAWABLEOBJECTCOMPONENT_JUCEHEADER__ | |||
| #include "jucer_DrawableEditor.h" | |||
| //============================================================================== | |||
| class DrawableObjectComponent : public Component, | |||
| public ValueTree::Listener, | |||
| public ChangeListener | |||
| { | |||
| public: | |||
| DrawableObjectComponent (const ValueTree& drawableNode_, | |||
| DrawableEditor& editor_, | |||
| Drawable* drawable_) | |||
| : drawable (drawable_), | |||
| drawableNode (drawableNode_), | |||
| editor (editor_) | |||
| { | |||
| setVisible (true); | |||
| nodeHashCode = DrawableEditor::getHashForNode (drawableNode); | |||
| drawableNode.addListener (this); | |||
| editor.selectedItems.addChangeListener (this); | |||
| } | |||
| ~DrawableObjectComponent() | |||
| { | |||
| deleteAllChildren(); | |||
| editor.selectedItems.removeChangeListener (this); | |||
| drawableNode.removeListener (this); | |||
| drawable = 0; | |||
| } | |||
| static DrawableObjectComponent* create (const ValueTree& node, DrawableEditor& editor, Drawable* drawable_); | |||
| //============================================================================== | |||
| void paint (Graphics& g) | |||
| { | |||
| //g.setColour (Colours::pink.withAlpha (0.2f)); | |||
| //g.fillRect (0, 0, getWidth(), getHeight()); | |||
| if (isSelected()) | |||
| { | |||
| g.setColour (Colours::red); | |||
| g.drawRect (0, 0, getWidth(), getHeight(), 2); | |||
| } | |||
| const Point<int> offset (getDrawableOriginRelativeToTopLeft()); | |||
| g.setOrigin (offset.getX(), offset.getY()); | |||
| drawable->draw (g, 1.0f, transform); | |||
| } | |||
| const Point<int> getDrawableOriginRelativeToTopLeft() const | |||
| { | |||
| return drawableOriginRelativeToParentTopLeft - getPosition(); | |||
| } | |||
| void findLassoItemsInArea (Array <int64>& itemsFound, Rectangle<int> r) const | |||
| { | |||
| if (getBounds().intersects (r)) | |||
| itemsFound.add (nodeHashCode); | |||
| r.translate (-getX(), -getY()); | |||
| for (int i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| DrawableObjectComponent* d = dynamic_cast <DrawableObjectComponent*> (getChildComponent(i)); | |||
| if (d != 0) | |||
| d->findLassoItemsInArea (itemsFound, r); | |||
| } | |||
| } | |||
| bool isSelected() const | |||
| { | |||
| return editor.selectedItems.isSelected (nodeHashCode); | |||
| } | |||
| //============================================================================== | |||
| void valueTreePropertyChanged (ValueTree& tree, const var::identifier& property) | |||
| { | |||
| if (tree == drawableNode) | |||
| { | |||
| editor.getDocument().changed(); | |||
| reloadFromValueTree(); | |||
| repaint(); | |||
| } | |||
| } | |||
| void valueTreeChildrenChanged (ValueTree& tree) | |||
| { | |||
| if (tree == drawableNode) | |||
| { | |||
| editor.getDocument().changed(); | |||
| reloadFromValueTree(); | |||
| repaint(); | |||
| } | |||
| } | |||
| void valueTreeParentChanged (ValueTree& tree) | |||
| { | |||
| editor.getDocument().changed(); | |||
| reloadFromValueTree(); | |||
| repaint(); | |||
| } | |||
| void changeListenerCallback (void*) | |||
| { | |||
| repaint(); | |||
| } | |||
| //============================================================================== | |||
| virtual void reloadFromValueTree() = 0; | |||
| void commitModifiedPath() | |||
| { | |||
| drawableNode = drawable->createValueTree(); | |||
| } | |||
| //============================================================================== | |||
| AffineTransform transform; | |||
| ScopedPointer <Drawable> drawable; | |||
| ValueTree drawableNode; | |||
| int64 nodeHashCode; | |||
| DrawableEditor& editor; | |||
| Point<int> drawableOriginRelativeToParentTopLeft; | |||
| }; | |||
| //============================================================================== | |||
| class PathDrawableComponent : public DrawableObjectComponent | |||
| { | |||
| public: | |||
| PathDrawableComponent (const ValueTree& drawableNode_, | |||
| DrawableEditor& editor_, | |||
| DrawablePath* drawable_) | |||
| : DrawableObjectComponent (drawableNode_, editor_, drawable_) | |||
| { | |||
| } | |||
| ~PathDrawableComponent() | |||
| { | |||
| } | |||
| // Relative to the drawable's origin, not the parent component or any other comp. | |||
| const Rectangle<int> getBoundsRectangle() | |||
| { | |||
| if (drawable == 0) | |||
| reloadFromValueTree(); | |||
| return drawable->getBounds().getSmallestIntegerContainer().expanded (2, 2); | |||
| } | |||
| bool hitTest (int x, int y) | |||
| { | |||
| const Point<int> offset (getDrawableOriginRelativeToTopLeft()); | |||
| return drawable->hitTest ((float) x - offset.getX(), | |||
| (float) y - offset.getY()); | |||
| } | |||
| void mouseDown (const MouseEvent& e) | |||
| { | |||
| mouseDownSelectResult = editor.selectedItems.addToSelectionOnMouseDown (nodeHashCode, e.mods); | |||
| pathBoundsOnMouseDown = getPath()->getPath().getBounds(); | |||
| } | |||
| void mouseDrag (const MouseEvent& e) | |||
| { | |||
| } | |||
| void mouseUp (const MouseEvent& e) | |||
| { | |||
| editor.selectedItems.addToSelectionOnMouseUp (nodeHashCode, e.mods, | |||
| ! e.mouseWasClicked(), | |||
| mouseDownSelectResult); | |||
| } | |||
| void reloadFromValueTree() | |||
| { | |||
| drawable = Drawable::createFromValueTree (drawableNode); | |||
| jassert (dynamic_cast <DrawablePath*> ((Drawable*) drawable) != 0); | |||
| setBounds (getBoundsRectangle().translated (drawableOriginRelativeToParentTopLeft.getX(), | |||
| drawableOriginRelativeToParentTopLeft.getY())); | |||
| } | |||
| private: | |||
| bool mouseDownSelectResult; | |||
| Rectangle<float> pathBoundsOnMouseDown; | |||
| DrawablePath* getPath() const | |||
| { | |||
| return dynamic_cast <DrawablePath*> ((Drawable*) drawable); | |||
| } | |||
| }; | |||
| //============================================================================== | |||
| class CompositeDrawableComponent : public DrawableObjectComponent | |||
| { | |||
| public: | |||
| CompositeDrawableComponent (const ValueTree& drawableNode_, | |||
| DrawableEditor& editor_, | |||
| DrawableComposite* drawable_) | |||
| : DrawableObjectComponent (drawableNode_, editor_, drawable_) | |||
| { | |||
| } | |||
| ~CompositeDrawableComponent() | |||
| { | |||
| } | |||
| void reloadFromValueTree() | |||
| { | |||
| drawable = Drawable::createFromValueTree (drawableNode); | |||
| DrawableComposite* dc = dynamic_cast <DrawableComposite*> ((Drawable*) drawable); | |||
| jassert (dc != 0); | |||
| deleteAllChildren(); | |||
| Rectangle<int> childBounds; | |||
| int i; | |||
| for (i = 0; i < dc->getNumDrawables(); ++i) | |||
| { | |||
| Drawable* d = dc->getDrawable (i); | |||
| jassert (d != 0); | |||
| DrawableObjectComponent* c = DrawableObjectComponent::create (drawableNode.getChild(i), editor, d); | |||
| if (c != 0) | |||
| { | |||
| addChildComponent (c); | |||
| const AffineTransform* t = dc->getDrawableTransform (i); | |||
| if (t != 0) | |||
| c->transform = *t; | |||
| c->drawableOriginRelativeToParentTopLeft = drawableOriginRelativeToParentTopLeft; | |||
| c->reloadFromValueTree(); | |||
| if (childBounds.isEmpty()) | |||
| childBounds = c->getBounds(); | |||
| else | |||
| childBounds = childBounds.getUnion (c->getBounds()); | |||
| } | |||
| } | |||
| for (i = dc->getNumDrawables(); --i >= 0;) | |||
| dc->removeDrawable (i, false); | |||
| setBounds (childBounds); | |||
| for (i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| DrawableObjectComponent* dc = dynamic_cast <DrawableObjectComponent*> (getChildComponent (i)); | |||
| if (dc != 0) | |||
| { | |||
| dc->setTopLeftPosition (dc->getX() - getX(), dc->getY() - getY()); | |||
| dc->drawableOriginRelativeToParentTopLeft = drawableOriginRelativeToParentTopLeft - getPosition(); | |||
| } | |||
| } | |||
| } | |||
| }; | |||
| //============================================================================== | |||
| DrawableObjectComponent* DrawableObjectComponent::create (const ValueTree& node, DrawableEditor& editor, Drawable* drawable_) | |||
| { | |||
| ScopedPointer<Drawable> drawable (drawable_); | |||
| if (drawable == 0) | |||
| drawable = Drawable::createFromValueTree (node); | |||
| DrawablePath* p = dynamic_cast <DrawablePath*> ((Drawable*) drawable); | |||
| if (p != 0) | |||
| { | |||
| drawable.release(); | |||
| return new PathDrawableComponent (node, editor, p); | |||
| } | |||
| DrawableComposite* dc = dynamic_cast <DrawableComposite*> ((Drawable*) drawable); | |||
| if (dc != 0) | |||
| { | |||
| drawable.release(); | |||
| return new CompositeDrawableComponent (node, editor, dc); | |||
| } | |||
| jassertfalse | |||
| return 0; | |||
| } | |||
| #endif // __JUCER_DRAWABLEOBJECTCOMPONENT_JUCEHEADER__ | |||
| @@ -0,0 +1,853 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #include "../../jucer_Headers.h" | |||
| #include "jucer_EditorCanvas.h" | |||
| //============================================================================== | |||
| class EditorCanvasBase::ResizeFrame : public EditorCanvasBase::OverlayItemComponent, | |||
| public ValueTree::Listener | |||
| { | |||
| public: | |||
| ResizeFrame (EditorCanvasBase* canvas_, const String& objectId_, const ValueTree& objectState_) | |||
| : OverlayItemComponent (canvas_), | |||
| objectState (objectState_), | |||
| objectId (objectId_), | |||
| borderThickness (4) | |||
| { | |||
| jassert (objectState.isValid()); | |||
| objectState.addListener (this); | |||
| } | |||
| ~ResizeFrame() | |||
| { | |||
| } | |||
| void paint (Graphics& g) | |||
| { | |||
| g.setColour (resizableBorderColour); | |||
| g.drawRect (0, 0, getWidth(), getHeight(), borderThickness); | |||
| } | |||
| void valueTreePropertyChanged (ValueTree&, const var::identifier&) { updatePosition(); } | |||
| void valueTreeChildrenChanged (ValueTree& treeWhoseChildHasChanged) { updatePosition(); } | |||
| void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) {} | |||
| void mouseEnter (const MouseEvent& e) { updateDragZone (e.getPosition()); } | |||
| void mouseExit (const MouseEvent& e) { updateDragZone (e.getPosition()); } | |||
| void mouseMove (const MouseEvent& e) { updateDragZone (e.getPosition()); } | |||
| void mouseDown (const MouseEvent& e) | |||
| { | |||
| updateDragZone (e.getPosition()); | |||
| canvas->beginDrag (e.getEventRelativeTo (getParentComponent()), dragZone); | |||
| canvas->showSizeGuides(); | |||
| } | |||
| void mouseDrag (const MouseEvent& e) | |||
| { | |||
| canvas->continueDrag (e.getEventRelativeTo (getParentComponent())); | |||
| autoScrollForMouseEvent (e); | |||
| } | |||
| void mouseUp (const MouseEvent& e) | |||
| { | |||
| canvas->hideSizeGuides(); | |||
| canvas->endDrag (e.getEventRelativeTo (getParentComponent())); | |||
| updateDragZone (e.getPosition()); | |||
| } | |||
| bool hitTest (int x, int y) | |||
| { | |||
| return ! getCentreArea().contains (x, y); | |||
| } | |||
| void updatePosition() | |||
| { | |||
| const Rectangle<int> bounds (canvas->getObjectPosition (objectState)); | |||
| setBoundsInTargetSpace (bounds.expanded (borderThickness, borderThickness)); | |||
| for (int i = sizeGuides.size(); --i >= 0;) | |||
| { | |||
| sizeGuides.getUnchecked(i)->setVisible (isVisible()); | |||
| sizeGuides.getUnchecked(i)->updatePosition (bounds); | |||
| } | |||
| } | |||
| const String& getTargetObjectID() const { return objectId; } | |||
| //============================================================================== | |||
| class SizeGuideComponent : public OverlayItemComponent, | |||
| public ComponentListener | |||
| { | |||
| public: | |||
| enum Type { left, right, top, bottom }; | |||
| //============================================================================== | |||
| SizeGuideComponent (EditorCanvasBase* canvas_, const ValueTree& state_, Type type_) | |||
| : OverlayItemComponent (canvas_), state (state_), type (type_) | |||
| { | |||
| setAlwaysOnTop (true); | |||
| canvas->addAndMakeVisible (this); | |||
| setInterceptsMouseClicks (false, false); | |||
| } | |||
| //============================================================================== | |||
| void paint (Graphics& g) | |||
| { | |||
| const float dashes[] = { 4.0f, 3.0f }; | |||
| g.setColour (resizableBorderColour); | |||
| g.drawDashedLine (0.5f, 0.5f, getWidth() - 0.5f, getHeight() - 0.5f, dashes, 2, 1.0f); | |||
| } | |||
| //============================================================================== | |||
| void updatePosition (const Rectangle<int>& bounds) | |||
| { | |||
| RectangleCoordinates coords (canvas->getObjectCoords (state)); | |||
| Coordinate coord (false); | |||
| Rectangle<int> r; | |||
| switch (type) | |||
| { | |||
| case left: coord = coords.left; r.setBounds (bounds.getX(), 0, 1, bounds.getY()); break; | |||
| case right: coord = coords.right; r.setBounds (bounds.getRight(), 0, 1, bounds.getY()); break; | |||
| case top: coord = coords.top; r.setBounds (0, bounds.getY(), bounds.getX(), 1); break; | |||
| case bottom: coord = coords.bottom; r.setBounds (0, bounds.getBottom(), bounds.getX(), 1); break; | |||
| default: jassertfalse; break; | |||
| } | |||
| setBoundsInTargetSpace (r); | |||
| label.update (getParentComponent(), coord.toString(), resizableBorderColour.withAlpha (0.9f), getX(), getY(), type != left, type != top); | |||
| } | |||
| private: | |||
| ValueTree state; | |||
| Type type; | |||
| FloatingLabelComponent label; | |||
| }; | |||
| void showSizeGuides() | |||
| { | |||
| if (sizeGuides.size() == 0) | |||
| { | |||
| sizeGuides.add (new SizeGuideComponent (canvas, objectState, SizeGuideComponent::left)); | |||
| sizeGuides.add (new SizeGuideComponent (canvas, objectState, SizeGuideComponent::right)); | |||
| sizeGuides.add (new SizeGuideComponent (canvas, objectState, SizeGuideComponent::top)); | |||
| sizeGuides.add (new SizeGuideComponent (canvas, objectState, SizeGuideComponent::bottom)); | |||
| } | |||
| } | |||
| void hideSizeGuides() | |||
| { | |||
| sizeGuides.clear(); | |||
| } | |||
| private: | |||
| ValueTree objectState; | |||
| String objectId; | |||
| ResizableBorderComponent::Zone dragZone; | |||
| const int borderThickness; | |||
| OwnedArray <SizeGuideComponent> sizeGuides; | |||
| const Rectangle<int> getCentreArea() const | |||
| { | |||
| return getLocalBounds().reduced (borderThickness, borderThickness); | |||
| } | |||
| void updateDragZone (const Point<int>& p) | |||
| { | |||
| ResizableBorderComponent::Zone newZone | |||
| = ResizableBorderComponent::Zone::fromPositionOnBorder (getLocalBounds(), | |||
| BorderSize (borderThickness), p); | |||
| if (dragZone != newZone) | |||
| { | |||
| dragZone = newZone; | |||
| setMouseCursor (newZone.getMouseCursor()); | |||
| } | |||
| } | |||
| }; | |||
| //============================================================================== | |||
| class EditorCanvasBase::MarkerComponent : public EditorCanvasBase::OverlayItemComponent, | |||
| public ValueTree::Listener | |||
| { | |||
| public: | |||
| MarkerComponent (EditorCanvasBase* canvas_, const ValueTree& marker_, bool isX_, int headSize_) | |||
| : OverlayItemComponent (canvas_), marker (marker_), isX (isX_), headSize (headSize_ - 2), | |||
| dragStartPos (0), isDragging (false) | |||
| { | |||
| marker.addListener (this); | |||
| } | |||
| ~MarkerComponent() | |||
| { | |||
| marker.removeListener (this); | |||
| } | |||
| void paint (Graphics& g) | |||
| { | |||
| g.setColour (Colours::darkgreen.withAlpha (isMouseOverOrDragging() ? 0.8f : 0.4f)); | |||
| g.fillPath (path); | |||
| } | |||
| void updatePosition() | |||
| { | |||
| Coordinate coord (getMarkerList().getCoordinate (marker)); | |||
| const int pos = roundToInt (coord.resolve (getMarkerList())); | |||
| const int width = 8; | |||
| if (isX) | |||
| setBoundsInTargetSpace (Rectangle<int> (pos - width, -headSize, width * 2, getParentHeight())); | |||
| else | |||
| setBoundsInTargetSpace (Rectangle<int> (-headSize, pos - width, getParentWidth(), width * 2)); | |||
| labelText = "name: " + getMarkerList().getName (marker) + "\nposition: " + coord.toString(); | |||
| updateLabel(); | |||
| } | |||
| void updateLabel() | |||
| { | |||
| if (isMouseOverOrDragging() && (getWidth() > 1 || getHeight() > 1)) | |||
| label.update (getParentComponent(), labelText, Colours::darkgreen, | |||
| isX ? getBounds().getCentreX() : getX() + headSize, | |||
| isX ? getY() + headSize : getBounds().getCentreY(), true, true); | |||
| else | |||
| label.remove(); | |||
| } | |||
| bool hitTest (int x, int y) | |||
| { | |||
| return (isX ? y : x) < headSize; | |||
| } | |||
| void resized() | |||
| { | |||
| const float lineThickness = 1.0f; | |||
| path.clear(); | |||
| if (isX) | |||
| { | |||
| const float centre = getWidth() / 2 + 0.5f; | |||
| path.addLineSegment (centre, 2.0f, centre, getHeight() + 1.0f, lineThickness); | |||
| path.addTriangle (1.0f, 0.0f, centre * 2.0f - 1.0f, 0.0f, centre, headSize + 1.0f); | |||
| } | |||
| else | |||
| { | |||
| const float centre = getHeight() / 2 + 0.5f; | |||
| path.addLineSegment (2.0f, centre, getWidth() + 1.0f, centre, lineThickness); | |||
| path.addTriangle (0.0f, centre * 2.0f - 1.0f, 0.0f, 1.0f, headSize + 1.0f, centre); | |||
| } | |||
| updateLabel(); | |||
| } | |||
| void mouseDown (const MouseEvent& e) | |||
| { | |||
| mouseDownPos = e.getEventRelativeTo (getParentComponent()).getMouseDownPosition(); | |||
| toFront (false); | |||
| updateLabel(); | |||
| canvas->getSelection().selectOnly (MarkerListBase::getId (marker)); | |||
| if (e.mods.isPopupMenu()) | |||
| { | |||
| isDragging = false; | |||
| } | |||
| else | |||
| { | |||
| isDragging = true; | |||
| canvas->getUndoManager().beginNewTransaction(); | |||
| Coordinate coord (getMarkerList().getCoordinate (marker)); | |||
| dragStartPos = coord.resolve (getMarkerList()); | |||
| } | |||
| } | |||
| void mouseDrag (const MouseEvent& e) | |||
| { | |||
| if (isDragging) | |||
| { | |||
| autoScrollForMouseEvent (e); | |||
| const MouseEvent e2 (e.getEventRelativeTo (getParentComponent())); | |||
| canvas->getUndoManager().undoCurrentTransactionOnly(); | |||
| Rectangle<int> axis; | |||
| if (isX) | |||
| axis.setBounds (0, 0, getParentWidth(), headSize); | |||
| else | |||
| axis.setBounds (0, 0, headSize, getParentHeight()); | |||
| if (axis.expanded (30, 30).contains (e.x, e.y)) | |||
| { | |||
| Coordinate coord (getMarkerList().getCoordinate (marker)); | |||
| // (can't use getDistanceFromDragStart() because it doesn't take into account auto-scrolling) | |||
| coord.moveToAbsolute (jmax (0, roundToInt (dragStartPos + (isX ? e2.x - mouseDownPos.getX() | |||
| : e2.y - mouseDownPos.getY()))), | |||
| getMarkerList()); | |||
| getMarkerList().setCoordinate (marker, coord); | |||
| } | |||
| else | |||
| { | |||
| getMarkerList().deleteMarker (marker); | |||
| } | |||
| } | |||
| } | |||
| void mouseUp (const MouseEvent& e) | |||
| { | |||
| canvas->getUndoManager().beginNewTransaction(); | |||
| updateLabel(); | |||
| } | |||
| void mouseEnter (const MouseEvent& e) | |||
| { | |||
| updateLabel(); | |||
| repaint(); | |||
| } | |||
| void mouseExit (const MouseEvent& e) | |||
| { | |||
| updateLabel(); | |||
| repaint(); | |||
| } | |||
| MarkerListBase& getMarkerList() { return canvas->getMarkerList (isX); } | |||
| void valueTreePropertyChanged (ValueTree&, const var::identifier&) { updatePosition(); } | |||
| void valueTreeChildrenChanged (ValueTree& treeWhoseChildHasChanged) {} | |||
| void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) {} | |||
| ValueTree marker; | |||
| const bool isX; | |||
| private: | |||
| const int headSize; | |||
| Path path; | |||
| double dragStartPos; | |||
| bool isDragging; | |||
| FloatingLabelComponent label; | |||
| String labelText; | |||
| Point<int> mouseDownPos; | |||
| }; | |||
| //============================================================================== | |||
| class EditorCanvasBase::OverlayComponent : public Component, | |||
| public LassoSource <SelectedItems::ItemType>, | |||
| public ChangeListener, | |||
| public ValueTree::Listener | |||
| { | |||
| public: | |||
| OverlayComponent (EditorCanvasBase* canvas_) | |||
| : canvas (canvas_) | |||
| { | |||
| setWantsKeyboardFocus (true); | |||
| getSelection().addChangeListener (this); | |||
| markerRootX = canvas->getMarkerList (true).getGroup(); | |||
| markerRootY = canvas->getMarkerList (false).getGroup(); | |||
| markerRootX.addListener (this); | |||
| markerRootY.addListener (this); | |||
| } | |||
| ~OverlayComponent() | |||
| { | |||
| lasso = 0; | |||
| markerRootX.removeListener (this); | |||
| markerRootY.removeListener (this); | |||
| getSelection().removeChangeListener (this); | |||
| deleteAllChildren(); | |||
| } | |||
| //============================================================================== | |||
| void mouseDown (const MouseEvent& e) | |||
| { | |||
| lasso = 0; | |||
| mouseDownCompUID = SelectedItems::ItemType(); | |||
| isDraggingClickedComp = false; | |||
| const MouseEvent e2 (e.getEventRelativeTo (canvas->getComponentHolder())); | |||
| const SelectedItems::ItemType underMouse (canvas->findObjectIdAt (e2.getPosition())); | |||
| if (e.mods.isPopupMenu()) | |||
| { | |||
| if (underMouse.isNotEmpty() && ! getSelection().isSelected (underMouse)) | |||
| getSelection().selectOnly (underMouse); | |||
| canvas->showPopupMenu (e2.getPosition()); | |||
| } | |||
| else | |||
| { | |||
| if (underMouse.isEmpty() || e.mods.isAltDown()) | |||
| { | |||
| canvas->deselectNonDraggableObjects(); | |||
| addAndMakeVisible (lasso = new LassoComponent <SelectedItems::ItemType>()); | |||
| lasso->beginLasso (e, this); | |||
| } | |||
| else | |||
| { | |||
| mouseDownCompUID = underMouse; | |||
| canvas->deselectNonDraggableObjects(); | |||
| mouseDownResult = getSelection().addToSelectionOnMouseDown (mouseDownCompUID, e.mods); | |||
| updateResizeFrames(); | |||
| hideSizeGuides(); | |||
| showSizeGuides(); | |||
| } | |||
| } | |||
| } | |||
| void mouseDrag (const MouseEvent& e) | |||
| { | |||
| if (lasso != 0) | |||
| { | |||
| lasso->dragLasso (e); | |||
| } | |||
| else if (mouseDownCompUID.isNotEmpty() && (! e.mouseWasClicked()) && (! e.mods.isPopupMenu())) | |||
| { | |||
| if (! isDraggingClickedComp) | |||
| { | |||
| isDraggingClickedComp = true; | |||
| getSelection().addToSelectionOnMouseUp (mouseDownCompUID, e.mods, true, mouseDownResult); | |||
| canvas->beginDrag (e, ResizableBorderComponent::Zone (ResizableBorderComponent::Zone::centre)); | |||
| } | |||
| canvas->continueDrag (e); | |||
| showSizeGuides(); | |||
| } | |||
| autoScrollForMouseEvent (e); | |||
| } | |||
| void mouseUp (const MouseEvent& e) | |||
| { | |||
| hideSizeGuides(); | |||
| if (lasso != 0) | |||
| { | |||
| lasso->endLasso(); | |||
| lasso = 0; | |||
| if (e.mouseWasClicked()) | |||
| getSelection().deselectAll(); | |||
| } | |||
| else if (! e.mods.isPopupMenu()) | |||
| { | |||
| if (! isDraggingClickedComp) | |||
| getSelection().addToSelectionOnMouseUp (mouseDownCompUID, e.mods, ! e.mouseWasClicked(), mouseDownResult); | |||
| } | |||
| canvas->endDrag (e); | |||
| } | |||
| void mouseDoubleClick (const MouseEvent& e) | |||
| { | |||
| const BorderSize& border = canvas->border; | |||
| const Rectangle<int> xAxis (border.getLeft(), 0, getWidth() - border.getLeftAndRight(), border.getTop()); | |||
| const Rectangle<int> yAxis (0, border.getTop(), border.getLeft(), getHeight() - border.getTopAndBottom()); | |||
| if (xAxis.contains (e.x, e.y)) | |||
| { | |||
| canvas->getMarkerList (true).createMarker ("Marker", e.x - xAxis.getX()); | |||
| } | |||
| else if (yAxis.contains (e.x, e.y)) | |||
| { | |||
| canvas->getMarkerList (false).createMarker ("Marker", e.y - yAxis.getY()); | |||
| } | |||
| } | |||
| void findLassoItemsInArea (Array <SelectedItems::ItemType>& itemsFound, const Rectangle<int>& area) | |||
| { | |||
| canvas->findLassoItemsInArea (itemsFound, area + relativePositionToOtherComponent (canvas->getComponentHolder(), Point<int>())); | |||
| } | |||
| SelectedItems& getSelection() { return canvas->getSelection(); } | |||
| SelectedItems& getLassoSelection() { return getSelection(); } | |||
| void resized() | |||
| { | |||
| updateMarkers(); | |||
| } | |||
| void changeListenerCallback (void*) | |||
| { | |||
| updateResizeFrames(); | |||
| } | |||
| void modifierKeysChanged (const ModifierKeys&) | |||
| { | |||
| Desktop::getInstance().getMainMouseSource().triggerFakeMove(); | |||
| } | |||
| void showSizeGuides() | |||
| { | |||
| for (int i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| ResizeFrame* resizer = dynamic_cast <ResizeFrame*> (getChildComponent(i)); | |||
| if (resizer != 0) | |||
| resizer->showSizeGuides(); | |||
| } | |||
| } | |||
| void hideSizeGuides() | |||
| { | |||
| for (int i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| ResizeFrame* resizer = dynamic_cast <ResizeFrame*> (getChildComponent(i)); | |||
| if (resizer != 0) | |||
| resizer->hideSizeGuides(); | |||
| } | |||
| } | |||
| void valueTreePropertyChanged (ValueTree&, const var::identifier&) { updateMarkers(); } | |||
| void valueTreeChildrenChanged (ValueTree& treeWhoseChildHasChanged) { updateMarkers(); } | |||
| void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) {} | |||
| void updateResizeFrames() | |||
| { | |||
| SelectedItems& selection = getSelection(); | |||
| StringArray requiredIds; | |||
| const int num = selection.getNumSelected(); | |||
| int i; | |||
| for (i = 0; i < num; ++i) | |||
| requiredIds.add (selection.getSelectedItem(i)); | |||
| for (i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| ResizeFrame* resizer = dynamic_cast <ResizeFrame*> (getChildComponent(i)); | |||
| if (resizer != 0) | |||
| { | |||
| if (selection.isSelected (resizer->getTargetObjectID())) | |||
| requiredIds.removeString (resizer->getTargetObjectID()); | |||
| else | |||
| delete resizer; | |||
| } | |||
| } | |||
| for (i = requiredIds.size(); --i >= 0;) | |||
| { | |||
| const ValueTree state (canvas->getObjectState (requiredIds[i])); | |||
| if (state.isValid()) // (the id may be a marker) | |||
| { | |||
| ResizeFrame* frame = new ResizeFrame (canvas, requiredIds[i], state); | |||
| addAndMakeVisible (frame); | |||
| frame->updatePosition(); | |||
| } | |||
| } | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| EditorCanvasBase* canvas; | |||
| ValueTree markerRootX, markerRootY; | |||
| ScopedPointer <LassoComponent <SelectedItems::ItemType> > lasso; | |||
| bool mouseDownResult, isDraggingClickedComp; | |||
| SelectedItems::ItemType mouseDownCompUID; | |||
| void updateMarkers (bool isX) | |||
| { | |||
| Array<ValueTree> requiredMarkers; | |||
| MarkerListBase& markerList = canvas->getMarkerList (isX); | |||
| const int num = markerList.size(); | |||
| int i; | |||
| for (i = 0; i < num; ++i) | |||
| requiredMarkers.add (markerList.getMarker (i)); | |||
| for (i = getNumChildComponents(); --i >= 0;) | |||
| { | |||
| MarkerComponent* marker = dynamic_cast <MarkerComponent*> (getChildComponent(i)); | |||
| if (marker != 0 && marker->isX == isX) | |||
| { | |||
| if (requiredMarkers.contains (marker->marker)) | |||
| { | |||
| marker->setVisible (true); | |||
| marker->updatePosition(); | |||
| requiredMarkers.removeValue (marker->marker); | |||
| } | |||
| else | |||
| { | |||
| if (marker->isMouseButtonDown()) | |||
| marker->setBounds (-1, -1, 1, 1); | |||
| else | |||
| delete marker; | |||
| } | |||
| } | |||
| } | |||
| for (i = requiredMarkers.size(); --i >= 0;) | |||
| { | |||
| MarkerComponent* marker = new MarkerComponent (canvas, requiredMarkers.getReference(i), | |||
| isX, isX ? canvas->border.getTop() | |||
| : canvas->border.getLeft()); | |||
| addAndMakeVisible (marker); | |||
| marker->updatePosition(); | |||
| } | |||
| } | |||
| void updateMarkers() | |||
| { | |||
| updateMarkers (true); | |||
| updateMarkers (false); | |||
| } | |||
| }; | |||
| //============================================================================== | |||
| class EditorCanvasBase::DocumentResizeFrame : public Component | |||
| { | |||
| public: | |||
| DocumentResizeFrame (EditorCanvasBase* canvas_) | |||
| : canvas (canvas_), dragStartWidth (0), dragStartHeight (0), resizerThickness (4) | |||
| { | |||
| } | |||
| ~DocumentResizeFrame() | |||
| { | |||
| } | |||
| void paint (Graphics& g) | |||
| { | |||
| const Rectangle<int> content (getContentArea()); | |||
| g.setColour (Colour::greyLevel (0.7f).withAlpha (0.4f)); | |||
| g.drawRect (content.expanded (resizerThickness, resizerThickness), resizerThickness); | |||
| const int bottomGap = getHeight() - content.getBottom(); | |||
| g.setFont (bottomGap - 5.0f); | |||
| g.setColour (Colours::grey); | |||
| g.drawText (String (content.getWidth()) + " x " + String (content.getHeight()), | |||
| 0, 0, jmax (content.getRight(), jmin (60, getWidth())), getHeight(), Justification::bottomRight, false); | |||
| } | |||
| void mouseMove (const MouseEvent& e) | |||
| { | |||
| updateDragZone (e.getPosition()); | |||
| } | |||
| void mouseDown (const MouseEvent& e) | |||
| { | |||
| updateDragZone (e.getPosition()); | |||
| dragStartWidth = canvas->getCanvasWidth(); | |||
| dragStartHeight = canvas->getCanvasHeight(); | |||
| canvas->showSizeGuides(); | |||
| } | |||
| void mouseDrag (const MouseEvent& e) | |||
| { | |||
| if (dragZone.isDraggingRightEdge()) | |||
| canvas->setCanvasWidth (jmax (1, dragStartWidth + e.getDistanceFromDragStartX())); | |||
| if (dragZone.isDraggingBottomEdge()) | |||
| canvas->setCanvasHeight (jmax (1, dragStartHeight + e.getDistanceFromDragStartY())); | |||
| } | |||
| void mouseUp (const MouseEvent& e) | |||
| { | |||
| canvas->hideSizeGuides(); | |||
| updateDragZone (e.getPosition()); | |||
| } | |||
| void updateDragZone (const Point<int>& p) | |||
| { | |||
| ResizableBorderComponent::Zone newZone | |||
| = ResizableBorderComponent::Zone::fromPositionOnBorder (getContentArea().expanded (resizerThickness, resizerThickness), | |||
| BorderSize (0, 0, resizerThickness, resizerThickness), p); | |||
| if (dragZone != newZone) | |||
| { | |||
| dragZone = newZone; | |||
| setMouseCursor (newZone.getMouseCursor()); | |||
| } | |||
| } | |||
| bool hitTest (int x, int y) | |||
| { | |||
| const Rectangle<int> content (getContentArea()); | |||
| return (x >= content.getRight() || y >= content.getBottom()) | |||
| && (! content.contains (x, y)) | |||
| && content.expanded (resizerThickness, resizerThickness).contains (x, y); | |||
| } | |||
| private: | |||
| EditorCanvasBase* canvas; | |||
| ResizableBorderComponent::Zone dragZone; | |||
| int dragStartWidth, dragStartHeight; | |||
| const int resizerThickness; | |||
| const Rectangle<int> getContentArea() const { return canvas->getContentArea(); } | |||
| }; | |||
| //============================================================================== | |||
| EditorCanvasBase::EditorCanvasBase() | |||
| : border (14) | |||
| { | |||
| setOpaque (true); | |||
| } | |||
| EditorCanvasBase::~EditorCanvasBase() | |||
| { | |||
| jassert (overlay == 0); | |||
| } | |||
| void EditorCanvasBase::initialise() | |||
| { | |||
| addAndMakeVisible (componentHolder = new Component()); | |||
| addAndMakeVisible (overlay = new OverlayComponent (this)); | |||
| overlay->addAndMakeVisible (resizeFrame = new DocumentResizeFrame (this)); | |||
| update(); | |||
| } | |||
| void EditorCanvasBase::shutdown() | |||
| { | |||
| dragger = 0; | |||
| deleteAndZero (overlay); | |||
| deleteAllChildren(); | |||
| } | |||
| //============================================================================== | |||
| void EditorCanvasBase::paint (Graphics& g) | |||
| { | |||
| g.fillAll (Colours::white); | |||
| g.setFont (border.getTop() - 5.0f); | |||
| g.setColour (Colours::darkgrey); | |||
| g.drawHorizontalLine (border.getTop() - 1, 2.0f, (float) getWidth() - border.getRight()); | |||
| g.drawVerticalLine (border.getLeft() - 1, 2.0f, (float) getHeight() - border.getBottom()); | |||
| drawXAxis (g, Rectangle<int> (border.getLeft(), 0, componentHolder->getWidth(), border.getTop())); | |||
| drawYAxis (g, Rectangle<int> (0, border.getTop(), border.getLeft(), componentHolder->getHeight())); | |||
| } | |||
| void EditorCanvasBase::drawXAxis (Graphics& g, const Rectangle<int>& r) | |||
| { | |||
| TickIterator ticks (0, r.getWidth(), 1.0, 10, 50); | |||
| float pos, tickLength; | |||
| String label; | |||
| while (ticks.getNextTick (pos, tickLength, label)) | |||
| { | |||
| if (pos > 0) | |||
| { | |||
| g.drawVerticalLine (r.getX() + (int) pos, r.getBottom() - tickLength * r.getHeight(), (float) r.getBottom()); | |||
| g.drawSingleLineText (label, r.getX() + (int) pos + 2, (int) r.getBottom() - 6); | |||
| } | |||
| } | |||
| } | |||
| void EditorCanvasBase::drawYAxis (Graphics& g, const Rectangle<int>& r) | |||
| { | |||
| TickIterator ticks (0, r.getHeight(), 1.0, 10, 80); | |||
| float pos, tickLength; | |||
| String label; | |||
| while (ticks.getNextTick (pos, tickLength, label)) | |||
| { | |||
| if (pos > 0) | |||
| { | |||
| g.drawHorizontalLine (r.getY() + (int) pos, r.getRight() - tickLength * r.getWidth(), (float) r.getRight()); | |||
| g.drawTextAsPath (label, AffineTransform::rotation (float_Pi / -2.0f) | |||
| .translated (r.getRight() - 6.0f, r.getY() + pos - 2.0f)); | |||
| } | |||
| } | |||
| } | |||
| const Rectangle<int> EditorCanvasBase::getContentArea() const | |||
| { | |||
| return border.subtractedFrom (getLocalBounds()); | |||
| } | |||
| //============================================================================== | |||
| void EditorCanvasBase::update() | |||
| { | |||
| setSize ((int) getCanvasWidth() + border.getLeftAndRight(), | |||
| (int) getCanvasHeight() + border.getTopAndBottom()); | |||
| updateComponents(); | |||
| } | |||
| void EditorCanvasBase::resized() | |||
| { | |||
| componentHolder->setBounds (getContentArea()); | |||
| overlay->setBounds (getLocalBounds()); | |||
| resizeFrame->setBounds (getLocalBounds()); | |||
| updateComponents(); | |||
| } | |||
| //============================================================================== | |||
| void EditorCanvasBase::showSizeGuides() { overlay->showSizeGuides(); } | |||
| void EditorCanvasBase::hideSizeGuides() { overlay->hideSizeGuides(); } | |||
| //============================================================================== | |||
| void EditorCanvasBase::beginDrag (const MouseEvent& e, const ResizableBorderComponent::Zone& zone) | |||
| { | |||
| dragger = createDragOperation (e, overlay, zone); | |||
| } | |||
| void EditorCanvasBase::continueDrag (const MouseEvent& e) | |||
| { | |||
| if (dragger != 0) | |||
| dragger->drag (e); | |||
| } | |||
| void EditorCanvasBase::endDrag (const MouseEvent& e) | |||
| { | |||
| if (dragger != 0) | |||
| { | |||
| dragger->drag (e); | |||
| dragger = 0; | |||
| } | |||
| } | |||
| //============================================================================== | |||
| EditorCanvasBase::OverlayItemComponent::OverlayItemComponent (EditorCanvasBase* canvas_) | |||
| : canvas (canvas_) | |||
| { | |||
| } | |||
| EditorCanvasBase::OverlayItemComponent::~OverlayItemComponent() | |||
| { | |||
| } | |||
| void EditorCanvasBase::OverlayItemComponent::setBoundsInTargetSpace (const Rectangle<int>& r) | |||
| { | |||
| setBounds (r + canvas->getComponentHolder()->relativePositionToOtherComponent (getParentComponent(), Point<int>())); | |||
| } | |||
| @@ -0,0 +1,138 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCER_EDITORCANVAS_H_EF886D17__ | |||
| #define __JUCER_EDITORCANVAS_H_EF886D17__ | |||
| #include "../../utility/jucer_Coordinate.h" | |||
| #include "../../utility/jucer_MarkerListBase.h" | |||
| //============================================================================== | |||
| class EditorCanvasBase : public Component, | |||
| public ValueTree::Listener | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| EditorCanvasBase(); | |||
| ~EditorCanvasBase(); | |||
| void initialise(); | |||
| void shutdown(); | |||
| //============================================================================== | |||
| typedef SelectedItemSet<String> SelectedItems; | |||
| //============================================================================== | |||
| void paint (Graphics& g); | |||
| void resized(); | |||
| const Rectangle<int> getContentArea() const; | |||
| void drawXAxis (Graphics& g, const Rectangle<int>& r); | |||
| void drawYAxis (Graphics& g, const Rectangle<int>& r); | |||
| //============================================================================== | |||
| void valueTreePropertyChanged (ValueTree&, const var::identifier&) { update(); } | |||
| void valueTreeChildrenChanged (ValueTree& treeWhoseChildHasChanged) { update(); } | |||
| void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) {} | |||
| //============================================================================== | |||
| void showSizeGuides(); | |||
| void hideSizeGuides(); | |||
| //============================================================================== | |||
| virtual void updateComponents() = 0; | |||
| virtual int getCanvasWidth() = 0; | |||
| virtual int getCanvasHeight() = 0; | |||
| virtual void setCanvasWidth (int w) = 0; | |||
| virtual void setCanvasHeight (int h) = 0; | |||
| virtual MarkerListBase& getMarkerList (bool isX) = 0; | |||
| virtual const SelectedItems::ItemType findObjectIdAt (const Point<int>& position) = 0; | |||
| virtual void showPopupMenu (const Point<int>& position) = 0; | |||
| virtual const ValueTree getObjectState (const String& objectId) = 0; | |||
| virtual const Rectangle<int> getObjectPosition (const ValueTree& state) = 0; | |||
| virtual RectangleCoordinates getObjectCoords (const ValueTree& state) = 0; | |||
| virtual SelectedItems& getSelection() = 0; | |||
| virtual UndoManager& getUndoManager() = 0; | |||
| virtual void deselectNonDraggableObjects() = 0; | |||
| virtual void findLassoItemsInArea (Array <SelectedItems::ItemType>& itemsFound, const Rectangle<int>& area) = 0; | |||
| class DragOperation | |||
| { | |||
| public: | |||
| DragOperation() {} | |||
| virtual ~DragOperation() {} | |||
| virtual void drag (const MouseEvent& e) = 0; | |||
| virtual bool dragItem (ValueTree& v, const Point<int>& distance, const Rectangle<float>& originalPos) = 0; | |||
| }; | |||
| virtual DragOperation* createDragOperation (const MouseEvent& e, | |||
| Component* snapGuideParentComponent, | |||
| const ResizableBorderComponent::Zone& zone) = 0; | |||
| void beginDrag (const MouseEvent& e, const ResizableBorderComponent::Zone& zone); | |||
| void continueDrag (const MouseEvent& e); | |||
| void endDrag (const MouseEvent& e); | |||
| //============================================================================== | |||
| Component* getComponentHolder() const { return componentHolder; } | |||
| //============================================================================== | |||
| class OverlayItemComponent : public Component | |||
| { | |||
| public: | |||
| OverlayItemComponent (EditorCanvasBase* canvas_); | |||
| ~OverlayItemComponent(); | |||
| void setBoundsInTargetSpace (const Rectangle<int>& r); | |||
| protected: | |||
| EditorCanvasBase* canvas; | |||
| }; | |||
| private: | |||
| //============================================================================== | |||
| const BorderSize border; | |||
| friend class OverlayItemComponent; | |||
| class ResizeFrame; | |||
| class MarkerComponent; | |||
| class DocumentResizeFrame; | |||
| class OverlayComponent; | |||
| //============================================================================== | |||
| Component* componentHolder; | |||
| OverlayComponent* overlay; | |||
| DocumentResizeFrame* resizeFrame; | |||
| ScopedPointer<DragOperation> dragger; | |||
| void update(); | |||
| }; | |||
| #endif // __JUCER_EDITORCANVAS_H_EF886D17__ | |||
| @@ -23,29 +23,40 @@ | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCER_EDITORDRAGOPERATION_H_720CD068__ | |||
| #define __JUCER_EDITORDRAGOPERATION_H_720CD068__ | |||
| #include "jucer_EditorCanvas.h" | |||
| //============================================================================== | |||
| class ComponentEditorCanvas::DragOperation | |||
| class EditorDragOperation : public EditorCanvasBase::DragOperation | |||
| { | |||
| public: | |||
| DragOperation (ComponentEditorCanvas& canvas_, | |||
| const Array<Component*>& items, | |||
| const Array<Component*>& itemsToSnapTo, | |||
| const MouseEvent& e, | |||
| Component* snapGuideParentComp_, | |||
| const ResizableBorderComponent::Zone& zone_) | |||
| EditorDragOperation (EditorCanvasBase* canvas_, const MouseEvent& e, | |||
| Component* snapGuideParentComp_, | |||
| const ResizableBorderComponent::Zone& zone_) | |||
| : canvas (canvas_), | |||
| snapGuideParentComp (snapGuideParentComp_), | |||
| zone (zone_), | |||
| mouseDownPos (e.getPosition()) | |||
| { | |||
| } | |||
| ~EditorDragOperation() | |||
| { | |||
| } | |||
| void initialise (const Array<ValueTree>& objects, | |||
| const Array<ValueTree>& objectsToSnapTo) | |||
| { | |||
| draggedObjects = objects; | |||
| int i; | |||
| for (i = 0; i < items.size(); ++i) | |||
| for (i = 0; i < objects.size(); ++i) | |||
| { | |||
| jassert (items.getUnchecked(i) != 0); | |||
| const ValueTree v (getDocument().getComponentState (items.getUnchecked(i))); | |||
| draggedComponents.add (v); | |||
| const Rectangle<float> floatPos (getComponentPosition (v)); | |||
| const Rectangle<float> floatPos (getObjectPosition (objects.getReference(i))); | |||
| originalPositions.add (floatPos); | |||
| if (zone.isDraggingWholeObject() || zone.isDraggingLeftEdge()) | |||
| verticalSnapPositions.add (SnapLine (floatPos.getX(), floatPos.getY(), floatPos.getBottom())); | |||
| @@ -69,26 +80,24 @@ public: | |||
| if (isDraggingLeftRight()) | |||
| { | |||
| verticalSnapTargets.add (SnapLine (0, -100.0f, 10000.0f)); | |||
| verticalSnapTargets.add (SnapLine (getDocument().getCanvasWidth().getValue(), -100.0f, 10000.0f)); | |||
| verticalSnapTargets.add (SnapLine (getCanvasWidth(), -100.0f, 10000.0f)); | |||
| if (zone.isDraggingWholeObject() || (zone.isDraggingLeftEdge() && zone.isDraggingRightEdge())) | |||
| verticalSnapTargets.add (SnapLine ((float) getDocument().getCanvasWidth().getValue() / 2.0f, 0, 10000.0f)); | |||
| verticalSnapTargets.add (SnapLine ((float) getCanvasWidth() / 2.0f, 0, 10000.0f)); | |||
| } | |||
| if (isDraggingUpDown()) | |||
| { | |||
| horizontalSnapTargets.add (SnapLine (0, -100.0f, 10000.0f)); | |||
| horizontalSnapTargets.add (SnapLine (getDocument().getCanvasHeight().getValue(), -100.0f, 10000.0f)); | |||
| horizontalSnapTargets.add (SnapLine (getCanvasHeight(), -100.0f, 10000.0f)); | |||
| if (zone.isDraggingWholeObject() || (zone.isDraggingTopEdge() && zone.isDraggingBottomEdge())) | |||
| horizontalSnapTargets.add (SnapLine ((float) getDocument().getCanvasHeight().getValue() / 2.0f, 0, 10000.0f)); | |||
| horizontalSnapTargets.add (SnapLine ((float) getCanvasHeight() / 2.0f, 0, 10000.0f)); | |||
| } | |||
| for (i = 0; i < itemsToSnapTo.size(); ++i) | |||
| for (i = 0; i < objectsToSnapTo.size(); ++i) | |||
| { | |||
| jassert (itemsToSnapTo.getUnchecked(i) != 0); | |||
| const ValueTree v (getDocument().getComponentState (itemsToSnapTo.getUnchecked(i))); | |||
| const Rectangle<float> floatPos (getComponentPosition (v)); | |||
| const Rectangle<float> floatPos (getObjectPosition (objectsToSnapTo.getReference (i))); | |||
| if (isDraggingLeftRight()) | |||
| { | |||
| @@ -112,12 +121,7 @@ public: | |||
| mergeSnapLines (verticalSnapTargets); | |||
| mergeSnapLines (horizontalSnapTargets); | |||
| getDocument().beginNewTransaction(); | |||
| } | |||
| ~DragOperation() | |||
| { | |||
| getDocument().beginNewTransaction(); | |||
| getUndoManager().beginNewTransaction(); | |||
| } | |||
| //============================================================================== | |||
| @@ -133,10 +137,10 @@ public: | |||
| }; | |||
| //============================================================================== | |||
| class AlignmentHintComponent : public OverlayItemComponent | |||
| class AlignmentHintComponent : public EditorCanvasBase::OverlayItemComponent | |||
| { | |||
| public: | |||
| AlignmentHintComponent (ComponentEditorCanvas& canvas_, const SnapLine& line_, bool isVertical_, Component* parent) | |||
| AlignmentHintComponent (EditorCanvasBase* canvas_, const SnapLine& line_, bool isVertical_, Component* parent) | |||
| : OverlayItemComponent (canvas_), line (line_), isVertical (isVertical_) | |||
| { | |||
| const int extraEndLength = 5; | |||
| @@ -167,7 +171,7 @@ public: | |||
| //============================================================================== | |||
| void drag (const MouseEvent& e) | |||
| { | |||
| getDocument().getUndoManager()->undoCurrentTransactionOnly(); | |||
| getUndoManager().undoCurrentTransactionOnly(); | |||
| // (can't use getOffsetFromDragStart() because of auto-scrolling) | |||
| Point<int> distance (e.getPosition() - mouseDownPos); | |||
| @@ -188,8 +192,8 @@ public: | |||
| // the coords are relative to each other.. | |||
| bool anyUpdated = false; | |||
| for (int i = 0; i < draggedComponents.size(); ++i) | |||
| if (dragItem (draggedComponents.getReference(i), distance, originalPositions.getReference(i))) | |||
| for (int i = 0; i < draggedObjects.size(); ++i) | |||
| if (dragItem (draggedObjects.getReference(i), distance, originalPositions.getReference(i))) | |||
| anyUpdated = true; | |||
| if (! anyUpdated) | |||
| @@ -203,21 +207,29 @@ public: | |||
| } | |||
| } | |||
| bool dragItem (ValueTree& v, const Point<int>& distance, const Rectangle<int>& originalPos) | |||
| bool dragItem (ValueTree& v, const Point<int>& distance, const Rectangle<float>& originalPos) | |||
| { | |||
| const Rectangle<int> newBounds (zone.resizeRectangleBy (originalPos, distance)); | |||
| const Rectangle<float> newBounds (zone.resizeRectangleBy (originalPos, Point<float> ((float) distance.getX(), | |||
| (float) distance.getY()))); | |||
| return setObjectPosition (v, newBounds); | |||
| } | |||
| RectangleCoordinates pr (getDocument().getCoordsFor (v)); | |||
| pr.moveToAbsolute (newBounds, getDocument()); | |||
| protected: | |||
| //============================================================================== | |||
| virtual int getCanvasWidth() = 0; | |||
| virtual int getCanvasHeight() = 0; | |||
| return getDocument().setCoordsFor (v, pr); | |||
| } | |||
| virtual const Rectangle<float> getObjectPosition (const ValueTree& state) = 0; | |||
| virtual bool setObjectPosition (ValueTree& state, const Rectangle<float>& newBounds) = 0; | |||
| virtual UndoManager& getUndoManager() = 0; | |||
| EditorCanvasBase* canvas; | |||
| private: | |||
| //============================================================================== | |||
| ComponentEditorCanvas& canvas; | |||
| Array <ValueTree> draggedComponents; | |||
| Array <Rectangle<int> > originalPositions; | |||
| Array <ValueTree> draggedObjects; | |||
| Array <Rectangle<float> > originalPositions; | |||
| Array <SnapLine> verticalSnapPositions, horizontalSnapPositions; | |||
| Array <SnapLine> verticalSnapTargets, horizontalSnapTargets; | |||
| const ResizableBorderComponent::Zone zone; | |||
| @@ -225,17 +237,6 @@ private: | |||
| Component* snapGuideParentComp; | |||
| Point<int> mouseDownPos; | |||
| ComponentDocument& getDocument() throw() { return canvas.getDocument(); } | |||
| const Rectangle<float> getComponentPosition (const ValueTree& state) | |||
| { | |||
| RectangleCoordinates relativePos (getDocument().getCoordsFor (state)); | |||
| const Rectangle<int> intPos (relativePos.resolve (getDocument())); | |||
| originalPositions.add (intPos); | |||
| return intPos.toFloat(); | |||
| } | |||
| static void mergeSnapLines (Array <SnapLine>& lines) | |||
| { | |||
| for (int i = lines.size(); --i > 0;) | |||
| @@ -329,6 +330,9 @@ private: | |||
| bool isDraggingLeftRight() const { return zone.isDraggingWholeObject() || zone.isDraggingLeftEdge() || zone.isDraggingRightEdge(); } | |||
| bool isDraggingUpDown() const { return zone.isDraggingWholeObject() || zone.isDraggingTopEdge() || zone.isDraggingBottomEdge(); } | |||
| DragOperation (const DragOperation&); | |||
| DragOperation& operator= (const DragOperation&); | |||
| EditorDragOperation (const EditorDragOperation&); | |||
| EditorDragOperation& operator= (const EditorDragOperation&); | |||
| }; | |||
| #endif // __JUCER_EDITORDRAGOPERATION_H_720CD068__ | |||
| @@ -0,0 +1,163 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCER_EDITORPANEL_H_8E192A99__ | |||
| #define __JUCER_EDITORPANEL_H_8E192A99__ | |||
| //============================================================================== | |||
| class EditorPanelBase : public Component | |||
| { | |||
| public: | |||
| EditorPanelBase() | |||
| : infoPanel (0), tree (0) | |||
| { | |||
| addAndMakeVisible (toolbar = new Toolbar()); | |||
| toolbar->setStyle (Toolbar::textOnly); | |||
| addAndMakeVisible (viewport = new Viewport()); | |||
| addChildComponent (tree = new TreeView()); | |||
| tree->setRootItemVisible (true); | |||
| tree->setMultiSelectEnabled (true); | |||
| tree->setDefaultOpenness (true); | |||
| tree->setColour (TreeView::backgroundColourId, Colours::white); | |||
| tree->setIndentSize (15); | |||
| } | |||
| ~EditorPanelBase() | |||
| { | |||
| jassert (infoPanel == 0); // remember to call shutdown() | |||
| deleteAllChildren(); | |||
| } | |||
| void initialise (Component* canvas, ToolbarItemFactory& toolbarFactory, TreeViewItem* treeRootItem) | |||
| { | |||
| toolbar->addDefaultItems (toolbarFactory); | |||
| viewport->setViewedComponent (canvas); | |||
| addAndMakeVisible (infoPanel = new InfoPanel (this)); | |||
| tree->setRootItem (treeRootItem); | |||
| resized(); | |||
| } | |||
| void shutdown() | |||
| { | |||
| tree->deleteRootItem(); | |||
| deleteAndZero (infoPanel); | |||
| } | |||
| void showOrHideProperties() | |||
| { | |||
| infoPanel->setVisible (! infoPanel->isVisible()); | |||
| resized(); | |||
| } | |||
| void showOrHideTree() | |||
| { | |||
| tree->setVisible (! tree->isVisible()); | |||
| resized(); | |||
| } | |||
| virtual SelectedItemSet<String>& getSelection() = 0; | |||
| virtual void getSelectedItemProperties (Array<PropertyComponent*>& newComps) = 0; | |||
| void resized() | |||
| { | |||
| const int toolbarHeight = 22; | |||
| toolbar->setBounds (0, 0, getWidth(), toolbarHeight); | |||
| int infoPanelWidth = 200; | |||
| if (infoPanel != 0 && infoPanel->isVisible()) | |||
| infoPanel->setBounds (getWidth() - infoPanelWidth, toolbar->getBottom(), infoPanelWidth, getHeight() - toolbar->getBottom()); | |||
| else | |||
| infoPanelWidth = 0; | |||
| if (tree->isVisible()) | |||
| { | |||
| tree->setBounds (0, toolbar->getBottom(), infoPanelWidth, getHeight() - toolbar->getBottom()); | |||
| viewport->setBounds (infoPanelWidth, toolbar->getBottom(), getWidth() - infoPanelWidth * 2, getHeight() - toolbar->getBottom()); | |||
| } | |||
| else | |||
| { | |||
| viewport->setBounds (0, toolbar->getBottom(), getWidth() - infoPanelWidth, getHeight() - toolbar->getBottom()); | |||
| } | |||
| } | |||
| private: | |||
| //============================================================================== | |||
| class InfoPanel : public Component, | |||
| public ChangeListener | |||
| { | |||
| public: | |||
| InfoPanel (EditorPanelBase* owner_) | |||
| : owner (owner_) | |||
| { | |||
| setOpaque (true); | |||
| addAndMakeVisible (props = new PropertyPanel()); | |||
| owner->getSelection().addChangeListener (this); | |||
| } | |||
| ~InfoPanel() | |||
| { | |||
| owner->getSelection().removeChangeListener (this); | |||
| props->clear(); | |||
| deleteAllChildren(); | |||
| } | |||
| void changeListenerCallback (void*) | |||
| { | |||
| Array <PropertyComponent*> newComps; | |||
| owner->getSelectedItemProperties (newComps); | |||
| props->clear(); | |||
| props->addProperties (newComps); | |||
| } | |||
| void paint (Graphics& g) | |||
| { | |||
| g.fillAll (Colour::greyLevel (0.92f)); | |||
| } | |||
| void resized() | |||
| { | |||
| props->setSize (getWidth(), getHeight()); | |||
| } | |||
| private: | |||
| EditorPanelBase* owner; | |||
| PropertyPanel* props; | |||
| }; | |||
| Toolbar* toolbar; | |||
| Viewport* viewport; | |||
| InfoPanel* infoPanel; | |||
| TreeView* tree; | |||
| }; | |||
| #endif // __JUCER_EDITORPANEL_H_8E192A99__ | |||
| @@ -26,8 +26,8 @@ | |||
| #ifndef __JUCER_GROUPINFORMATIONCOMPONENT_JUCEHEADER__ | |||
| #define __JUCER_GROUPINFORMATIONCOMPONENT_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "../model/jucer_Project.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "../../model/Project/jucer_Project.h" | |||
| //============================================================================== | |||
| @@ -23,7 +23,7 @@ | |||
| ============================================================================== | |||
| */ | |||
| #include "../jucer_Headers.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "jucer_ItemPreviewComponent.h" | |||
| @@ -24,12 +24,12 @@ | |||
| */ | |||
| #include "jucer_ProjectContentComponent.h" | |||
| #include "jucer_MainWindow.h" | |||
| #include "jucer_SourceCodeEditor.h" | |||
| #include "Drawable Editor/jucer_DrawableEditor.h" | |||
| #include "../jucer_MainWindow.h" | |||
| #include "../Code Editor/jucer_SourceCodeEditor.h" | |||
| #include "../Drawable Editor/jucer_DrawableEditor.h" | |||
| #include "jucer_ProjectInformationComponent.h" | |||
| #include "jucer_TreeViewTypes.h" | |||
| #include "../model/jucer_ProjectExporter.h" | |||
| #include "../../model/Project/jucer_ProjectExporter.h" | |||
| //============================================================================== | |||
| @@ -26,8 +26,8 @@ | |||
| #ifndef __JUCER_PROJECTCONTENTCOMPONENT_JUCEHEADER__ | |||
| #define __JUCER_PROJECTCONTENTCOMPONENT_JUCEHEADER__ | |||
| #include "../model/jucer_Project.h" | |||
| #include "jucer_OpenDocumentManager.h" | |||
| #include "../../model/Project/jucer_Project.h" | |||
| #include "../jucer_OpenDocumentManager.h" | |||
| //============================================================================== | |||
| @@ -20,7 +20,7 @@ | |||
| */ | |||
| //[Headers] You can add your own extra header files here... | |||
| #include "../model/jucer_ProjectExporter.h" | |||
| #include "../../model/Project/jucer_ProjectExporter.h" | |||
| //[/Headers] | |||
| #include "jucer_ProjectInformationComponent.h" | |||
| @@ -23,8 +23,8 @@ | |||
| #define __JUCER_PROJECTINFORMATIONCOMPONENT_JUCEHEADER__ | |||
| //[Headers] -- You can add your own extra header files here -- | |||
| #include "../jucer_Headers.h" | |||
| #include "../model/jucer_Project.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "../../model/Project/jucer_Project.h" | |||
| //[/Headers] | |||
| @@ -24,7 +24,7 @@ | |||
| */ | |||
| #include "jucer_ProjectTreeViewBase.h" | |||
| #include "jucer_OpenDocumentManager.h" | |||
| #include "../jucer_OpenDocumentManager.h" | |||
| //============================================================================== | |||
| @@ -26,11 +26,12 @@ | |||
| #ifndef __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__ | |||
| #define __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__ | |||
| #include "../jucer_Headers.h" | |||
| #include "../model/jucer_Project.h" | |||
| #include "../model/jucer_ResourceFile.h" | |||
| #include "../../jucer_Headers.h" | |||
| #include "../../model/Project/jucer_Project.h" | |||
| #include "../../model/Project/jucer_ResourceFile.h" | |||
| #include "../jucer_JucerTreeViewBase.h" | |||
| #include "jucer_ProjectContentComponent.h" | |||
| #include "jucer_JucerTreeViewBase.h" | |||
| //============================================================================== | |||
| class ProjectTreeViewBase : public JucerTreeViewBase, | |||
| @@ -26,10 +26,10 @@ | |||
| #include "jucer_TreeViewTypes.h" | |||
| #include "jucer_ProjectInformationComponent.h" | |||
| #include "jucer_GroupInformationComponent.h" | |||
| #include "jucer_SourceCodeEditor.h" | |||
| #include "jucer_OpenDocumentManager.h" | |||
| #include "jucer_ItemPreviewComponent.h" | |||
| #include "../model/jucer_NewFileWizard.h" | |||
| #include "../jucer_OpenDocumentManager.h" | |||
| #include "../Project Editor/jucer_ItemPreviewComponent.h" | |||
| #include "../Code Editor/jucer_SourceCodeEditor.h" | |||
| #include "../../model/Project/jucer_NewFileWizard.h" | |||
| //============================================================================== | |||
| @@ -24,7 +24,7 @@ | |||
| */ | |||
| #include "jucer_DocumentEditorComponent.h" | |||
| #include "jucer_ProjectContentComponent.h" | |||
| #include "Project Editor/jucer_ProjectContentComponent.h" | |||
| //============================================================================== | |||
| @@ -26,8 +26,8 @@ | |||
| #include "../jucer_Headers.h" | |||
| #include "jucer_MainWindow.h" | |||
| #include "jucer_OpenDocumentManager.h" | |||
| #include "jucer_SourceCodeEditor.h" | |||
| #include "../model/jucer_ProjectWizard.h" | |||
| #include "Code Editor/jucer_SourceCodeEditor.h" | |||
| #include "../model/Project/jucer_ProjectWizard.h" | |||
| //============================================================================== | |||
| @@ -26,7 +26,7 @@ | |||
| #ifndef __JUCER_MAINWINDOW_JUCEHEADER__ | |||
| #define __JUCER_MAINWINDOW_JUCEHEADER__ | |||
| #include "jucer_ProjectContentComponent.h" | |||
| #include "Project Editor/jucer_ProjectContentComponent.h" | |||
| #include "Component Editor/jucer_ComponentEditor.h" | |||
| //============================================================================== | |||
| @@ -24,9 +24,9 @@ | |||
| */ | |||
| #include "jucer_OpenDocumentManager.h" | |||
| #include "jucer_SourceCodeEditor.h" | |||
| #include "Code Editor/jucer_SourceCodeEditor.h" | |||
| #include "Drawable Editor/jucer_DrawableEditor.h" | |||
| #include "jucer_ItemPreviewComponent.h" | |||
| #include "Project Editor/jucer_ItemPreviewComponent.h" | |||
| #include "Component Editor/jucer_ComponentEditor.h" | |||
| @@ -26,8 +26,8 @@ | |||
| #ifndef __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__ | |||
| #define __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__ | |||
| #include "../model/jucer_Project.h" | |||
| #include "../model/jucer_DrawableDocument.h" | |||
| #include "../model/Project/jucer_Project.h" | |||
| #include "../model/Drawable/jucer_DrawableDocument.h" | |||
| class DocumentEditorComponent; | |||
| @@ -344,7 +344,7 @@ RectangleCoordinates::RectangleCoordinates() | |||
| { | |||
| } | |||
| RectangleCoordinates::RectangleCoordinates (const Rectangle<int>& rect, const String& componentName) | |||
| RectangleCoordinates::RectangleCoordinates (const Rectangle<float>& rect, const String& componentName) | |||
| : left (rect.getX(), true), | |||
| right (rect.getWidth(), componentName + ".left", true), | |||
| top (rect.getY(), false), | |||
| @@ -374,7 +374,7 @@ const Rectangle<int> RectangleCoordinates::resolve (const Coordinate::MarkerReso | |||
| return Rectangle<int> (l, t, r - l, b - t); | |||
| } | |||
| void RectangleCoordinates::moveToAbsolute (const Rectangle<int>& newPos, const Coordinate::MarkerResolver& markerResolver) | |||
| void RectangleCoordinates::moveToAbsolute (const Rectangle<float>& newPos, const Coordinate::MarkerResolver& markerResolver) | |||
| { | |||
| left.moveToAbsolute (newPos.getX(), markerResolver); | |||
| right.moveToAbsolute (newPos.getRight(), markerResolver); | |||
| @@ -146,12 +146,12 @@ class RectangleCoordinates | |||
| public: | |||
| //============================================================================== | |||
| RectangleCoordinates(); | |||
| explicit RectangleCoordinates (const Rectangle<int>& rect, const String& componentName); | |||
| explicit RectangleCoordinates (const Rectangle<float>& rect, const String& componentName); | |||
| explicit RectangleCoordinates (const String& stringVersion); | |||
| //============================================================================== | |||
| const Rectangle<int> resolve (const Coordinate::MarkerResolver& markerResolver) const; | |||
| void moveToAbsolute (const Rectangle<int>& newPos, const Coordinate::MarkerResolver& markerResolver); | |||
| void moveToAbsolute (const Rectangle<float>& newPos, const Coordinate::MarkerResolver& markerResolver); | |||
| const String toString() const; | |||
| Coordinate left, right, top, bottom; | |||
| @@ -0,0 +1,76 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-10 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online 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.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCER_MARKERLISTBASE_H_E0091A88__ | |||
| #define __JUCER_MARKERLISTBASE_H_E0091A88__ | |||
| //============================================================================== | |||
| class MarkerListBase : public Coordinate::MarkerResolver | |||
| { | |||
| public: | |||
| MarkerListBase (const ValueTree& group_, bool isX_) : group (group_), isX (isX_) {} | |||
| virtual ~MarkerListBase() {} | |||
| static const String getId (const ValueTree& markerState) { return markerState [getIdProperty()]; } | |||
| ValueTree& getGroup() { return group; } | |||
| int size() const { return group.getNumChildren(); } | |||
| ValueTree getMarker (int index) const { return group.getChild (index); } | |||
| ValueTree getMarkerNamed (const String& name) const { return group.getChildWithProperty (getMarkerNameProperty(), name); } | |||
| bool contains (const ValueTree& markerState) const { return markerState.isAChildOf (group); } | |||
| const Coordinate getCoordinate (const ValueTree& markerState) const { return Coordinate (markerState [getMarkerNameProperty()].toString(), isX); } | |||
| const String getName (const ValueTree& markerState) const { return markerState [getMarkerNameProperty()].toString(); } | |||
| Value getNameAsValue (const ValueTree& markerState) const { return markerState.getPropertyAsValue (getMarkerNameProperty(), getUndoManager()); } | |||
| void setCoordinate (ValueTree& markerState, const Coordinate& newCoord) { markerState.setProperty (getMarkerNameProperty(), newCoord.toString(), getUndoManager()); } | |||
| void createMarker (const String& name, int position) | |||
| { | |||
| ValueTree marker (getMarkerTag()); | |||
| marker.setProperty (getMarkerNameProperty(), getNonexistentMarkerName (name), 0); | |||
| marker.setProperty (getMarkerPosProperty(), Coordinate (position, isX).toString(), 0); | |||
| marker.setProperty (getIdProperty(), createAlphaNumericUID(), 0); | |||
| group.addChild (marker, -1, getUndoManager()); | |||
| } | |||
| void deleteMarker (ValueTree& markerState) { group.removeChild (markerState, getUndoManager()); } | |||
| bool createProperties (Array <PropertyComponent*>& props, const String& itemId); | |||
| //============================================================================== | |||
| static const char* getMarkerTag() { return "MARKER"; } | |||
| static const char* getIdProperty() { return "id"; } | |||
| static const char* getMarkerNameProperty() { return "name"; } | |||
| static const char* getMarkerPosProperty() { return "position"; } | |||
| protected: | |||
| virtual UndoManager* getUndoManager() const = 0; | |||
| virtual const String getNonexistentMarkerName (const String& name) = 0; | |||
| ValueTree group; | |||
| const bool isX; | |||
| }; | |||
| #endif // __JUCER_MARKERLISTBASE_H_E0091A88__ | |||
| @@ -60878,6 +60878,26 @@ const Rectangle<int> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangl | |||
| return b; | |||
| } | |||
| const Rectangle<float> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangle<float> b, const Point<float>& offset) const throw() | |||
| { | |||
| if (isDraggingWholeObject()) | |||
| return b + offset; | |||
| if (isDraggingLeftEdge()) | |||
| b.setLeft (b.getX() + offset.getX()); | |||
| if (isDraggingRightEdge()) | |||
| b.setWidth (jmax (0.0f, b.getWidth() + offset.getX())); | |||
| if (isDraggingTopEdge()) | |||
| b.setTop (b.getY() + offset.getY()); | |||
| if (isDraggingBottomEdge()) | |||
| b.setHeight (jmax (0.0f, b.getHeight() + offset.getY())); | |||
| return b; | |||
| } | |||
| ResizableBorderComponent::ResizableBorderComponent (Component* const componentToResize, | |||
| ComponentBoundsConstrainer* const constrainer_) | |||
| : component (componentToResize), | |||
| @@ -6378,7 +6378,7 @@ public: | |||
| Value (const Value& other); | |||
| Value (const var& initialValue); | |||
| explicit Value (const var& initialValue); | |||
| ~Value(); | |||
| @@ -23180,6 +23180,9 @@ public: | |||
| const Rectangle<int> resizeRectangleBy (Rectangle<int> original, | |||
| const Point<int>& distance) const throw(); | |||
| const Rectangle<float> resizeRectangleBy (Rectangle<float> original, | |||
| const Point<float>& distance) const throw(); | |||
| int getZoneFlags() const throw() { return zone; } | |||
| private: | |||
| @@ -65,7 +65,7 @@ public: | |||
| Value (const Value& other); | |||
| /** Creates a Value that is set to the specified value. */ | |||
| Value (const var& initialValue); | |||
| explicit Value (const var& initialValue); | |||
| /** Destructor. */ | |||
| ~Value(); | |||
| @@ -110,6 +110,25 @@ const Rectangle<int> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangl | |||
| return b; | |||
| } | |||
| const Rectangle<float> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangle<float> b, const Point<float>& offset) const throw() | |||
| { | |||
| if (isDraggingWholeObject()) | |||
| return b + offset; | |||
| if (isDraggingLeftEdge()) | |||
| b.setLeft (b.getX() + offset.getX()); | |||
| if (isDraggingRightEdge()) | |||
| b.setWidth (jmax (0.0f, b.getWidth() + offset.getX())); | |||
| if (isDraggingTopEdge()) | |||
| b.setTop (b.getY() + offset.getY()); | |||
| if (isDraggingBottomEdge()) | |||
| b.setHeight (jmax (0.0f, b.getHeight() + offset.getY())); | |||
| return b; | |||
| } | |||
| //============================================================================== | |||
| ResizableBorderComponent::ResizableBorderComponent (Component* const componentToResize, | |||
| @@ -141,6 +141,12 @@ public: | |||
| const Rectangle<int> resizeRectangleBy (Rectangle<int> original, | |||
| const Point<int>& distance) const throw(); | |||
| /** Resizes this rectangle by the given amount, moving just the edges that this zone | |||
| applies to. | |||
| */ | |||
| const Rectangle<float> resizeRectangleBy (Rectangle<float> original, | |||
| const Point<float>& distance) const throw(); | |||
| /** Returns the raw flags for this zone. */ | |||
| int getZoneFlags() const throw() { return zone; } | |||