| @@ -43,30 +43,30 @@ ifeq ($(CONFIG),Release) | |||||
| endif | endif | ||||
| OBJECTS := \ | OBJECTS := \ | ||||
| $(OBJDIR)/jucer_ComponentTypeManager.o \ | |||||
| $(OBJDIR)/jucer_ComponentDocument.o \ | |||||
| $(OBJDIR)/jucer_CodeGenerator.o \ | $(OBJDIR)/jucer_CodeGenerator.o \ | ||||
| $(OBJDIR)/jucer_Coordinate.o \ | |||||
| $(OBJDIR)/jucer_ComponentDocument.o \ | |||||
| $(OBJDIR)/jucer_ComponentTypeManager.o \ | |||||
| $(OBJDIR)/jucer_DrawableDocument.o \ | $(OBJDIR)/jucer_DrawableDocument.o \ | ||||
| $(OBJDIR)/jucer_NewFileWizard.o \ | $(OBJDIR)/jucer_NewFileWizard.o \ | ||||
| $(OBJDIR)/jucer_Project.o \ | $(OBJDIR)/jucer_Project.o \ | ||||
| $(OBJDIR)/jucer_ProjectExporter.o \ | $(OBJDIR)/jucer_ProjectExporter.o \ | ||||
| $(OBJDIR)/jucer_ProjectWizard.o \ | $(OBJDIR)/jucer_ProjectWizard.o \ | ||||
| $(OBJDIR)/jucer_ResourceFile.o \ | $(OBJDIR)/jucer_ResourceFile.o \ | ||||
| $(OBJDIR)/jucer_SourceCodeEditor.o \ | |||||
| $(OBJDIR)/jucer_ComponentEditor.o \ | $(OBJDIR)/jucer_ComponentEditor.o \ | ||||
| $(OBJDIR)/jucer_ComponentEditorCanvas.o \ | |||||
| $(OBJDIR)/jucer_DrawableEditor.o \ | $(OBJDIR)/jucer_DrawableEditor.o \ | ||||
| $(OBJDIR)/jucer_EditorCanvas.o \ | |||||
| $(OBJDIR)/jucer_DocumentEditorComponent.o \ | $(OBJDIR)/jucer_DocumentEditorComponent.o \ | ||||
| $(OBJDIR)/jucer_GroupInformationComponent.o \ | |||||
| $(OBJDIR)/jucer_ItemPreviewComponent.o \ | |||||
| $(OBJDIR)/jucer_JucerTreeViewBase.o \ | $(OBJDIR)/jucer_JucerTreeViewBase.o \ | ||||
| $(OBJDIR)/jucer_MainWindow.o \ | $(OBJDIR)/jucer_MainWindow.o \ | ||||
| $(OBJDIR)/jucer_OpenDocumentManager.o \ | $(OBJDIR)/jucer_OpenDocumentManager.o \ | ||||
| $(OBJDIR)/jucer_GroupInformationComponent.o \ | |||||
| $(OBJDIR)/jucer_ItemPreviewComponent.o \ | |||||
| $(OBJDIR)/jucer_ProjectContentComponent.o \ | $(OBJDIR)/jucer_ProjectContentComponent.o \ | ||||
| $(OBJDIR)/jucer_ProjectInformationComponent.o \ | $(OBJDIR)/jucer_ProjectInformationComponent.o \ | ||||
| $(OBJDIR)/jucer_ProjectTreeViewBase.o \ | $(OBJDIR)/jucer_ProjectTreeViewBase.o \ | ||||
| $(OBJDIR)/jucer_SourceCodeEditor.o \ | |||||
| $(OBJDIR)/jucer_TreeViewTypes.o \ | $(OBJDIR)/jucer_TreeViewTypes.o \ | ||||
| $(OBJDIR)/jucer_Coordinate.o \ | |||||
| $(OBJDIR)/jucer_StoredSettings.o \ | $(OBJDIR)/jucer_StoredSettings.o \ | ||||
| $(OBJDIR)/jucer_UtilityFunctions.o \ | $(OBJDIR)/jucer_UtilityFunctions.o \ | ||||
| $(OBJDIR)/jucer_Main.o \ | $(OBJDIR)/jucer_Main.o \ | ||||
| @@ -91,52 +91,52 @@ clean: | |||||
| -@rm -rf $(OBJDIR)/* | -@rm -rf $(OBJDIR)/* | ||||
| -@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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | ||||
| @@ -146,12 +146,12 @@ $(OBJDIR)/jucer_ComponentEditor.o: ../../Source/ui/Component\ Editor/jucer_Compo | |||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | ||||
| @@ -161,52 +161,52 @@ $(OBJDIR)/jucer_DocumentEditorComponent.o: ../../Source/ui/jucer_DocumentEditorC | |||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(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) | -@mkdir -p $(OBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | ||||
| @@ -17,30 +17,30 @@ | |||||
| DBE3CE9482B19CF1AE700805 = { isa = PBXBuildFile; fileRef = 23CF69B4C644D1E6E61E5C82; }; | DBE3CE9482B19CF1AE700805 = { isa = PBXBuildFile; fileRef = 23CF69B4C644D1E6E61E5C82; }; | ||||
| 93C9F3F27602A33DDC9C2250 = { isa = PBXBuildFile; fileRef = 2767E1D082874D301D5D5F43; }; | 93C9F3F27602A33DDC9C2250 = { isa = PBXBuildFile; fileRef = 2767E1D082874D301D5D5F43; }; | ||||
| 2E6836738CE7EB452FDC7E9A = { isa = PBXBuildFile; fileRef = D9FB1A5365FEEB854A0FF7BF; }; | 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; }; | D706C3B5016318D85FE452C2 = { isa = PBXBuildFile; fileRef = 3263F4099F45D6FACD28F08D; }; | ||||
| CDB5102BEFD7C18BD28709F3 = { isa = PBXBuildFile; fileRef = 81D9A078702EFE0A32C037A1; }; | |||||
| E43D00B370F289420379B759 = { isa = PBXBuildFile; fileRef = 82F91CF84A296665177CB79A; }; | E43D00B370F289420379B759 = { isa = PBXBuildFile; fileRef = 82F91CF84A296665177CB79A; }; | ||||
| EFFCA85EFB4F06F1BEB9AB97 = { isa = PBXBuildFile; fileRef = 03E9C079FBBF727D50A2B678; }; | |||||
| 944CE0EADAD951F48EC77071 = { isa = PBXBuildFile; fileRef = 3B2C45064E85B3B631D4F921; }; | 944CE0EADAD951F48EC77071 = { isa = PBXBuildFile; fileRef = 3B2C45064E85B3B631D4F921; }; | ||||
| 4E8860E0F8680956A6F5B493 = { isa = PBXBuildFile; fileRef = 8F731296532276CBF2B6190D; }; | |||||
| 288F5E7A2EC305BB4D8D73D1 = { isa = PBXBuildFile; fileRef = 1E7EDE73A92751752BC90A62; }; | |||||
| 2417927E323BFE201D5985B9 = { isa = PBXBuildFile; fileRef = 3C60CAE9481EE0113C15A0B9; }; | 2417927E323BFE201D5985B9 = { isa = PBXBuildFile; fileRef = 3C60CAE9481EE0113C15A0B9; }; | ||||
| A1CB18029E09A66E192D9A29 = { isa = PBXBuildFile; fileRef = 17F5B1F00F15DB37EA4A4AEA; }; | A1CB18029E09A66E192D9A29 = { isa = PBXBuildFile; fileRef = 17F5B1F00F15DB37EA4A4AEA; }; | ||||
| F8C762CCE16669F76D2209B9 = { isa = PBXBuildFile; fileRef = 118A505BA7079B3C8C9B858B; }; | 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; }; | DDAB225ABE572196882C3524 = { isa = PBXBuildFile; fileRef = 7A1CD936BD306A6E0BEFB046; }; | ||||
| FA8C72364CDFD2B76F16C0F1 = { isa = PBXBuildFile; fileRef = E3BD76BDB547509885E14DEE; }; | FA8C72364CDFD2B76F16C0F1 = { isa = PBXBuildFile; fileRef = E3BD76BDB547509885E14DEE; }; | ||||
| 6B6B0EBBE899B0ACDCAD92F5 = { isa = PBXBuildFile; fileRef = 0DC331A7B856F30AD266A3E6; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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; }; | 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 = ( | 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 = ( | 3A0BE83502CB509D623C2C07 = { isa = PBXGroup; children = ( | ||||
| BAA4B3ECAA1344B0B4052542, | |||||
| 3263F4099F45D6FACD28F08D, | 3263F4099F45D6FACD28F08D, | ||||
| 16328135EAE8536A5E2AB454, | 16328135EAE8536A5E2AB454, | ||||
| 81D9A078702EFE0A32C037A1, | |||||
| 3B77C7A8D9A2386088D75CFE, | 3B77C7A8D9A2386088D75CFE, | ||||
| 7CB154C3682F8C786134A6F3, | 7CB154C3682F8C786134A6F3, | ||||
| B5F5AD9FC53F60610C71367C, | B5F5AD9FC53F60610C71367C, | ||||
| @@ -217,38 +226,49 @@ | |||||
| E6053BD673F80E900DDA3593 = { isa = PBXGroup; children = ( | E6053BD673F80E900DDA3593 = { isa = PBXGroup; children = ( | ||||
| 82F91CF84A296665177CB79A, | 82F91CF84A296665177CB79A, | ||||
| D1776C5F3E6BB7E8C698BAD6, | 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 = ( | 63A4428C116D97D7C5C05DC8 = { isa = PBXGroup; children = ( | ||||
| 336D07CB9ED81D2A985A8543, | |||||
| 3A0BE83502CB509D623C2C07, | 3A0BE83502CB509D623C2C07, | ||||
| E6053BD673F80E900DDA3593, | E6053BD673F80E900DDA3593, | ||||
| F4B31EE979DF2BE5AA276EAF, | |||||
| E6BB0D9B515B50E418D98B9C, | E6BB0D9B515B50E418D98B9C, | ||||
| 95A4E72FC64A7338CB259DF7, | |||||
| 3B2C45064E85B3B631D4F921, | 3B2C45064E85B3B631D4F921, | ||||
| 156F72179BBFCD0D9804C266, | 156F72179BBFCD0D9804C266, | ||||
| 8F731296532276CBF2B6190D, | |||||
| C1DB44D4E31AF6FAD8746EA6, | |||||
| 1E7EDE73A92751752BC90A62, | |||||
| 637290E424EEED413A6A6D83, | |||||
| 3C60CAE9481EE0113C15A0B9, | 3C60CAE9481EE0113C15A0B9, | ||||
| BF0218D8FC9831826CD2F670, | BF0218D8FC9831826CD2F670, | ||||
| 17F5B1F00F15DB37EA4A4AEA, | 17F5B1F00F15DB37EA4A4AEA, | ||||
| 65C0C87A85D4371BDE1C4347, | 65C0C87A85D4371BDE1C4347, | ||||
| 118A505BA7079B3C8C9B858B, | 118A505BA7079B3C8C9B858B, | ||||
| 5377D74DB551C2B83F73FAE0, | 5377D74DB551C2B83F73FAE0, | ||||
| 487D3D6777F8C3E26C0D5887, | |||||
| 442910162B36728054AACDFC, | |||||
| 9170F22B59096F151A9FFFB3, | |||||
| 097BD8BB61EE09C908A8C99D, | |||||
| AEE4E1F518A91ABB386CFD9E, | |||||
| F400D65DAD8A93736A7960CC, | |||||
| E55B34E6694D69E3DBB107D1, | |||||
| 8A3A8D57685177B2F0D52C17, | |||||
| B4439D672F2977238755E1E2, | |||||
| 4BF0300CA427D2D308542534 ); name = UI; sourceTree = "<group>"; }; | |||||
| 73551B9BCDF3BAC06FECEAF8 ); name = UI; sourceTree = "<group>"; }; | |||||
| 14B5B6D3D07644058F0F526F = { isa = PBXGroup; children = ( | 14B5B6D3D07644058F0F526F = { isa = PBXGroup; children = ( | ||||
| AAF3C58696944A256CA61730, | AAF3C58696944A256CA61730, | ||||
| 9736236B5C4D6A16FC7E03AC, | 9736236B5C4D6A16FC7E03AC, | ||||
| C7ADB43F83A83FFC08921A12, | |||||
| EFA0636FB8ABA3377AB6C6F4, | |||||
| CC9A3046B8B9FCDFE2092F51, | |||||
| 848F9EFCBB691000A4B32346, | |||||
| F99858EE1CD3B23057B8BEBD, | F99858EE1CD3B23057B8BEBD, | ||||
| 7A1CD936BD306A6E0BEFB046, | 7A1CD936BD306A6E0BEFB046, | ||||
| E99413C9561A66310DAD5EEB, | E99413C9561A66310DAD5EEB, | ||||
| @@ -372,30 +392,30 @@ | |||||
| 673FACB8969ADED17ACEFF7C ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; | 673FACB8969ADED17ACEFF7C ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; | ||||
| 87CCE4CB1FAB40B6F21DEACE = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; | 87CCE4CB1FAB40B6F21DEACE = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; | ||||
| 5362E03ADF975A126C1F2F7B = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( | 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, | D706C3B5016318D85FE452C2, | ||||
| CDB5102BEFD7C18BD28709F3, | |||||
| E43D00B370F289420379B759, | E43D00B370F289420379B759, | ||||
| EFFCA85EFB4F06F1BEB9AB97, | |||||
| 944CE0EADAD951F48EC77071, | 944CE0EADAD951F48EC77071, | ||||
| 4E8860E0F8680956A6F5B493, | |||||
| 288F5E7A2EC305BB4D8D73D1, | |||||
| 2417927E323BFE201D5985B9, | 2417927E323BFE201D5985B9, | ||||
| A1CB18029E09A66E192D9A29, | A1CB18029E09A66E192D9A29, | ||||
| F8C762CCE16669F76D2209B9, | F8C762CCE16669F76D2209B9, | ||||
| 4FF75A3C7DCB9FD245320FE6, | |||||
| A70AED2E35B809981470A547, | |||||
| 4D6C7380B8BB0BA9470C146C, | |||||
| 438FED16CFDB36A4BE1F5F35, | |||||
| 33A4BAAD7A79BA63E78CB503, | |||||
| 496F7F18FCBE1E212F62E328, | |||||
| BFFA4F695DDFEA8EE6CE7241, | |||||
| C74E7F0701EF10141D5C1D9D, | |||||
| 54CF219EADAD8E6DC7D20A8E, | |||||
| 984444E3B2947675DC7D65DA, | |||||
| 58BF60E87F9A8EDCACC5D1AE, | |||||
| 5BF87265418D736250283182, | |||||
| DDAB225ABE572196882C3524, | DDAB225ABE572196882C3524, | ||||
| FA8C72364CDFD2B76F16C0F1, | FA8C72364CDFD2B76F16C0F1, | ||||
| 6B6B0EBBE899B0ACDCAD92F5, | 6B6B0EBBE899B0ACDCAD92F5, | ||||
| @@ -133,51 +133,57 @@ | |||||
| <Files> | <Files> | ||||
| <Filter Name="The Jucer"> | <Filter Name="The Jucer"> | ||||
| <Filter Name="Model"> | <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> | </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> | ||||
| <Filter Name="UI"> | <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"> | <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.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.h"/> | <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_ComponentEditorCanvas.h"/> | ||||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/> | <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/> | ||||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/> | <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/> | ||||
| @@ -186,37 +192,47 @@ | |||||
| <Filter Name="Drawable Editor"> | <Filter Name="Drawable Editor"> | ||||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.cpp"/> | <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_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> | </Filter> | ||||
| <File RelativePath="..\..\Source\ui\jucer_CommandIDs.h"/> | <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.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.h"/> | <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.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/> | <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/> | <File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/> | <File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/> | <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.h"/> | <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> | ||||
| <Filter Name="Utility"> | <Filter Name="Utility"> | ||||
| <File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/> | <File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/> | ||||
| <File RelativePath="..\..\Source\utility\jucer_Colours.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_RelativePath.h"/> | ||||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/> | <File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/> | ||||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/> | <File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/> | ||||
| @@ -133,51 +133,57 @@ | |||||
| <Files> | <Files> | ||||
| <Filter Name="The Jucer"> | <Filter Name="The Jucer"> | ||||
| <Filter Name="Model"> | <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> | </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> | ||||
| <Filter Name="UI"> | <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"> | <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.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.h"/> | <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_ComponentEditorCanvas.h"/> | ||||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/> | <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/> | ||||
| <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/> | <File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/> | ||||
| @@ -186,37 +192,47 @@ | |||||
| <Filter Name="Drawable Editor"> | <Filter Name="Drawable Editor"> | ||||
| <File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.cpp"/> | <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_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> | </Filter> | ||||
| <File RelativePath="..\..\Source\ui\jucer_CommandIDs.h"/> | <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.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.h"/> | <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.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/> | <File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/> | <File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/> | <File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/> | <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/> | ||||
| <File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.h"/> | <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> | ||||
| <Filter Name="Utility"> | <Filter Name="Utility"> | ||||
| <File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/> | <File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/> | ||||
| <File RelativePath="..\..\Source\utility\jucer_Colours.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_RelativePath.h"/> | ||||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/> | <File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/> | ||||
| <File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/> | <File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/> | ||||
| @@ -27,91 +27,95 @@ | |||||
| </CONFIGURATIONS> | </CONFIGURATIONS> | ||||
| <MAINGROUP name="The Jucer" id="NhrJq66R"> | <MAINGROUP name="The Jucer" id="NhrJq66R"> | ||||
| <GROUP id="EmpOiUg6" name="Model"> | <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> | </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> | ||||
| <GROUP id="8J0PD9iW5" name="UI"> | <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"> | <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 id="Q48V5uBKu" name="jucer_ComponentEditor.cpp" compile="1" resource="0" | ||||
| file="Source/ui/Component Editor/jucer_ComponentEditor.cpp"/> | file="Source/ui/Component Editor/jucer_ComponentEditor.cpp"/> | ||||
| <FILE id="B1zNCvltV" name="jucer_ComponentEditor.h" compile="0" resource="0" | <FILE id="B1zNCvltV" name="jucer_ComponentEditor.h" compile="0" resource="0" | ||||
| file="Source/ui/Component Editor/jucer_ComponentEditor.h"/> | 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" | <FILE id="PYpzAE3jK" name="jucer_ComponentEditorCanvas.h" compile="0" | ||||
| resource="0" file="Source/ui/Component Editor/jucer_ComponentEditorCanvas.h"/> | resource="0" file="Source/ui/Component Editor/jucer_ComponentEditorCanvas.h"/> | ||||
| <FILE id="pqP7rsm8g" name="jucer_ComponentEditorCodeView.h" compile="0" | <FILE id="pqP7rsm8g" name="jucer_ComponentEditorCodeView.h" compile="0" | ||||
| @@ -126,27 +130,29 @@ | |||||
| file="Source/ui/Drawable Editor/jucer_DrawableEditor.cpp"/> | file="Source/ui/Drawable Editor/jucer_DrawableEditor.cpp"/> | ||||
| <FILE id="66AHRmzWg" name="jucer_DrawableEditor.h" compile="0" resource="0" | <FILE id="66AHRmzWg" name="jucer_DrawableEditor.h" compile="0" resource="0" | ||||
| file="Source/ui/Drawable Editor/jucer_DrawableEditor.h"/> | 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> | </GROUP> | ||||
| <FILE id="uuKrNBIAS" name="jucer_CommandIDs.h" compile="0" resource="0" | <FILE id="uuKrNBIAS" name="jucer_CommandIDs.h" compile="0" resource="0" | ||||
| file="Source/ui/jucer_CommandIDs.h"/> | 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" | <FILE id="p410VfaaI" name="jucer_DocumentEditorComponent.cpp" compile="1" | ||||
| resource="0" file="Source/ui/jucer_DocumentEditorComponent.cpp"/> | resource="0" file="Source/ui/jucer_DocumentEditorComponent.cpp"/> | ||||
| <FILE id="OyWSiFRV8" name="jucer_DocumentEditorComponent.h" compile="0" | <FILE id="OyWSiFRV8" name="jucer_DocumentEditorComponent.h" compile="0" | ||||
| resource="0" file="Source/ui/jucer_DocumentEditorComponent.h"/> | 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" | <FILE id="YoCYXKlw1" name="jucer_JucerTreeViewBase.cpp" compile="1" | ||||
| resource="0" file="Source/ui/jucer_JucerTreeViewBase.cpp"/> | resource="0" file="Source/ui/jucer_JucerTreeViewBase.cpp"/> | ||||
| <FILE id="qIZzQUNrv" name="jucer_JucerTreeViewBase.h" compile="0" resource="0" | <FILE id="qIZzQUNrv" name="jucer_JucerTreeViewBase.h" compile="0" resource="0" | ||||
| @@ -159,32 +165,46 @@ | |||||
| resource="0" file="Source/ui/jucer_OpenDocumentManager.cpp"/> | resource="0" file="Source/ui/jucer_OpenDocumentManager.cpp"/> | ||||
| <FILE id="3dKt81z9" name="jucer_OpenDocumentManager.h" compile="0" | <FILE id="3dKt81z9" name="jucer_OpenDocumentManager.h" compile="0" | ||||
| resource="0" file="Source/ui/jucer_OpenDocumentManager.h"/> | 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> | ||||
| <GROUP id="wje6dWhDW" name="Utility"> | <GROUP id="wje6dWhDW" name="Utility"> | ||||
| <FILE id="hmWl0ODQe" name="jucer_ColourEditorComponent.h" compile="0" | <FILE id="hmWl0ODQe" name="jucer_ColourEditorComponent.h" compile="0" | ||||
| resource="0" file="Source/utility/jucer_ColourEditorComponent.h"/> | resource="0" file="Source/utility/jucer_ColourEditorComponent.h"/> | ||||
| <FILE id="bjibbvm3S" name="jucer_Colours.h" compile="0" resource="0" | <FILE id="bjibbvm3S" name="jucer_Colours.h" compile="0" resource="0" | ||||
| file="Source/utility/jucer_Colours.h"/> | 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 id="nMKxowe0" name="jucer_RelativePath.h" compile="0" resource="0" | ||||
| file="Source/utility/jucer_RelativePath.h"/> | file="Source/utility/jucer_RelativePath.h"/> | ||||
| <FILE id="gb8kYJDkJ" name="jucer_StoredSettings.cpp" compile="1" resource="0" | <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 numSwatchColours = 24; | ||||
| const int snapSizes[] = { 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 32 }; | 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__ | #endif // __JUCER_HEADERS_JUCEHEADER__ | ||||
| @@ -25,7 +25,7 @@ | |||||
| #include "jucer_ComponentTypeManager.h" | #include "jucer_ComponentTypeManager.h" | ||||
| #include "jucer_ComponentTypes.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, | const Rectangle<int> bounds (getDefaultSize().withPosition (Point<int> (Random::getSystemRandom().nextInt (100) + 100, | ||||
| 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__ | #ifndef __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__ | ||||
| #define __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__ | #define __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__ | ||||
| #include "../../jucer_Headers.h" | |||||
| #include "../../../jucer_Headers.h" | |||||
| #include "../jucer_ComponentDocument.h" | #include "../jucer_ComponentDocument.h" | ||||
| #include "../../utility/jucer_ColourEditorComponent.h" | |||||
| #include "../../../utility/jucer_ColourEditorComponent.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -26,8 +26,8 @@ | |||||
| #ifndef __JUCER_CODEGENERATOR_H_F79AEF58__ | #ifndef __JUCER_CODEGENERATOR_H_F79AEF58__ | ||||
| #define __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 "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 componentGroupTag = "COMPONENTS"; | ||||
| static const char* const markersGroupXTag = "MARKERS_X"; | static const char* const markersGroupXTag = "MARKERS_X"; | ||||
| static const char* const markersGroupYTag = "MARKERS_Y"; | 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 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"; | 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::compNameProperty = "name"; | ||||
| const char* const ComponentDocument::compTooltipProperty = "tooltip"; | const char* const ComponentDocument::compTooltipProperty = "tooltip"; | ||||
| const char* const ComponentDocument::compFocusOrderProperty = "focusOrder"; | 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_) | 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.isValid()); | ||||
| jassert (group.isAChildOf (document_.getRoot())); | 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 | const Coordinate ComponentDocument::MarkerList::findMarker (const String& name, bool isHorizontal) const | ||||
| @@ -729,21 +676,16 @@ private: | |||||
| ValueTree markerState; | 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) | bool ComponentDocument::MarkerList::createProperties (Array <PropertyComponent*>& props, const String& itemId) | ||||
| { | { | ||||
| ValueTree marker (group.getChildWithProperty (idProperty, itemId)); | ValueTree marker (group.getChildWithProperty (idProperty, itemId)); | ||||
| if (marker.isValid()) | 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; | return true; | ||||
| } | } | ||||
| @@ -26,9 +26,10 @@ | |||||
| #ifndef __JUCER_COMPONENTDOCUMENT_JUCEHEADER__ | #ifndef __JUCER_COMPONENTDOCUMENT_JUCEHEADER__ | ||||
| #define __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" | #include "jucer_CodeGenerator.h" | ||||
| @@ -86,36 +87,20 @@ public: | |||||
| void performNewComponentMenuItem (int menuResultCode); | void performNewComponentMenuItem (int menuResultCode); | ||||
| //============================================================================== | //============================================================================== | ||||
| class MarkerList : public Coordinate::MarkerResolver | |||||
| class MarkerList : public MarkerListBase | |||||
| { | { | ||||
| public: | public: | ||||
| MarkerList (ComponentDocument& document, bool isX); | 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; | const Coordinate findMarker (const String& name, bool isHorizontal) const; | ||||
| bool createProperties (Array <PropertyComponent*>& props, const String& itemId); | 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); | void addMarkerMenuItems (const ValueTree& markerState, const Coordinate& coord, PopupMenu& menu, bool isAnchor1); | ||||
| const String getChosenMarkerMenuItem (const Coordinate& coord, int itemId) const; | const String getChosenMarkerMenuItem (const Coordinate& coord, int itemId) const; | ||||
| UndoManager* getUndoManager() const; | |||||
| const String getNonexistentMarkerName (const String& name); | |||||
| private: | private: | ||||
| ComponentDocument& document; | ComponentDocument& document; | ||||
| ValueTree group; | |||||
| const bool isX; | |||||
| MarkerList (const MarkerList&); | MarkerList (const MarkerList&); | ||||
| MarkerList& operator= (const MarkerList&); | MarkerList& operator= (const MarkerList&); | ||||
| @@ -162,8 +147,6 @@ public: | |||||
| static const char* const compNameProperty; | static const char* const compNameProperty; | ||||
| static const char* const compTooltipProperty; | static const char* const compTooltipProperty; | ||||
| static const char* const compFocusOrderProperty; | static const char* const compFocusOrderProperty; | ||||
| static const char* const markerNameProperty; | |||||
| static const char* const markerPosProperty; | |||||
| static const char* const jucerIDProperty; | static const char* const jucerIDProperty; | ||||
| static const String getJucerIDFor (Component* c); | 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__ | #ifndef __JUCER_DRAWABLEDOCUMENT_JUCEHEADER__ | ||||
| #define __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, | class DrawableDocument : public ValueTree::Listener, | ||||
| public ChangeBroadcaster, | |||||
| public Timer | |||||
| public ChangeBroadcaster | |||||
| { | { | ||||
| public: | public: | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -49,34 +50,75 @@ public: | |||||
| bool hasChangedSinceLastSave() const; | bool hasChangedSinceLastSave() const; | ||||
| void changed(); | void changed(); | ||||
| ValueTree& getRoot() { return root; } | |||||
| ValueTree getRootDrawableNode() const; | ValueTree getRootDrawableNode() const; | ||||
| void addRectangle(); | void addRectangle(); | ||||
| void addCircle(); | void addCircle(); | ||||
| void addImage (const File& imageFile); | 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 valueTreePropertyChanged (ValueTree& tree, const var::identifier& name); | ||||
| void valueTreeChildrenChanged (ValueTree& tree); | void valueTreeChildrenChanged (ValueTree& tree); | ||||
| void valueTreeParentChanged (ValueTree& tree); | void valueTreeParentChanged (ValueTree& tree); | ||||
| void timerCallback(); | |||||
| //============================================================================== | //============================================================================== | ||||
| UndoManager* getUndoManager() throw() { return &undoManager; } | |||||
| UndoManager* getUndoManager() const throw() { return &undoManager; } | |||||
| private: | private: | ||||
| Project* project; | Project* project; | ||||
| File drawableFile; | File drawableFile; | ||||
| ValueTree drawableRoot; | |||||
| UndoManager undoManager; | |||||
| ValueTree root; | |||||
| ScopedPointer<MarkerList> markersX, markersY; | |||||
| mutable UndoManager undoManager; | |||||
| bool saveAsXml, needsSaving; | 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); | void save (OutputStream& output); | ||||
| bool load (InputStream& input); | bool load (InputStream& input); | ||||
| void addMissingIds (ValueTree tree) const; | void addMissingIds (ValueTree tree) const; | ||||
| void addDrawable (Drawable& d); | 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_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__ | #ifndef __JUCER_NEWFILEWIZARD_JUCEHEADER__ | ||||
| #define __JUCER_NEWFILEWIZARD_JUCEHEADER__ | #define __JUCER_NEWFILEWIZARD_JUCEHEADER__ | ||||
| #include "../jucer_Headers.h" | |||||
| #include "../../jucer_Headers.h" | |||||
| #include "jucer_Project.h" | #include "jucer_Project.h" | ||||
| @@ -27,7 +27,7 @@ | |||||
| #include "jucer_ProjectExporter.h" | #include "jucer_ProjectExporter.h" | ||||
| #include "jucer_ResourceFile.h" | #include "jucer_ResourceFile.h" | ||||
| #include "jucer_ProjectSaver.h" | #include "jucer_ProjectSaver.h" | ||||
| #include "../ui/jucer_OpenDocumentManager.h" | |||||
| #include "../../ui/jucer_OpenDocumentManager.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -26,7 +26,7 @@ | |||||
| #ifndef __JUCER_PROJECT_JUCEHEADER__ | #ifndef __JUCER_PROJECT_JUCEHEADER__ | ||||
| #define __JUCER_PROJECT_JUCEHEADER__ | #define __JUCER_PROJECT_JUCEHEADER__ | ||||
| #include "../jucer_Headers.h" | |||||
| #include "../../jucer_Headers.h" | |||||
| class ProjectExporter; | class ProjectExporter; | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -26,7 +26,7 @@ | |||||
| #ifndef __JUCER_PROJECTEXPORTER_JUCEHEADER__ | #ifndef __JUCER_PROJECTEXPORTER_JUCEHEADER__ | ||||
| #define __JUCER_PROJECTEXPORTER_JUCEHEADER__ | #define __JUCER_PROJECTEXPORTER_JUCEHEADER__ | ||||
| #include "../jucer_Headers.h" | |||||
| #include "../../jucer_Headers.h" | |||||
| #include "jucer_Project.h" | #include "jucer_Project.h" | ||||
| @@ -26,7 +26,7 @@ | |||||
| #ifndef __JUCER_PROJECTWIZARD_JUCEHEADER__ | #ifndef __JUCER_PROJECTWIZARD_JUCEHEADER__ | ||||
| #define __JUCER_PROJECTWIZARD_JUCEHEADER__ | #define __JUCER_PROJECTWIZARD_JUCEHEADER__ | ||||
| #include "../jucer_Headers.h" | |||||
| #include "../../jucer_Headers.h" | |||||
| #include "jucer_Project.h" | #include "jucer_Project.h" | ||||
| @@ -24,8 +24,8 @@ | |||||
| */ | */ | ||||
| #include "jucer_ResourceFile.h" | #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"; | static const char* resourceFileIdentifierString = "JUCER_BINARY_RESOURCE"; | ||||
| @@ -26,7 +26,7 @@ | |||||
| #ifndef __JUCER_RESOURCEFILE_JUCEHEADER__ | #ifndef __JUCER_RESOURCEFILE_JUCEHEADER__ | ||||
| #define __JUCER_RESOURCEFILE_JUCEHEADER__ | #define __JUCER_RESOURCEFILE_JUCEHEADER__ | ||||
| #include "../jucer_Headers.h" | |||||
| #include "../../jucer_Headers.h" | |||||
| #include "jucer_Project.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_SourceCodeEditor.h" | ||||
| #include "jucer_OpenDocumentManager.h" | |||||
| #include "../jucer_OpenDocumentManager.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -26,8 +26,8 @@ | |||||
| #ifndef __JUCER_SOURCECODEEDITOR_JUCEHEADER__ | #ifndef __JUCER_SOURCECODEEDITOR_JUCEHEADER__ | ||||
| #define __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 "../../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_ComponentEditor.h" | ||||
| #include "jucer_ComponentEditorCanvas.h" | |||||
| #include "jucer_ComponentEditorTreeView.h" | #include "jucer_ComponentEditorTreeView.h" | ||||
| #include "jucer_ComponentEditorCodeView.h" | #include "jucer_ComponentEditorCodeView.h" | ||||
| #include "jucer_ComponentEditorToolbar.h" | #include "jucer_ComponentEditorToolbar.h" | ||||
| @@ -61,132 +66,39 @@ private: | |||||
| //============================================================================== | //============================================================================== | ||||
| class ComponentEditor::LayoutEditorHolder : public Component | |||||
| class ComponentEditor::LayoutEditorHolder : public EditorPanelBase | |||||
| { | { | ||||
| public: | public: | ||||
| LayoutEditorHolder (ComponentEditor& editor_) | 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() | ~LayoutEditorHolder() | ||||
| { | { | ||||
| tree->deleteRootItem(); | |||||
| deleteAndZero (infoPanel); | |||||
| deleteAllChildren(); | |||||
| shutdown(); | |||||
| } | } | ||||
| void createCanvas() | 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: | 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; | ComponentEditorToolbarFactory toolbarFactory; | ||||
| ComponentEditor& editor; | ComponentEditor& editor; | ||||
| Viewport* viewport; | |||||
| InfoPanel* infoPanel; | |||||
| TreeView* tree; | |||||
| }; | }; | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -231,6 +143,7 @@ ComponentEditor::ComponentEditor (OpenDocumentManager::Document* document, | |||||
| addAndMakeVisible (tabs = new TabbedComponent (TabbedButtonBar::TabsAtRight)); | addAndMakeVisible (tabs = new TabbedComponent (TabbedButtonBar::TabsAtRight)); | ||||
| tabs->setTabBarDepth (22); | tabs->setTabBarDepth (22); | ||||
| tabs->setOutline (0); | |||||
| tabs->addTab ("Class Settings", Colour::greyLevel (0.88f), classInfoHolder, true); | tabs->addTab ("Class Settings", Colour::greyLevel (0.88f), classInfoHolder, true); | ||||
| tabs->addTab ("Components", Colours::white, layoutEditorHolder, true); | tabs->addTab ("Components", Colours::white, layoutEditorHolder, true); | ||||
| @@ -255,18 +168,97 @@ void ComponentEditor::resized() | |||||
| tabs->setBounds (getLocalBounds()); | 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: | public: | ||||
| TestComponent (ComponentDocument& document_) | TestComponent (ComponentDocument& document_) | ||||
| @@ -278,6 +270,7 @@ public: | |||||
| ~TestComponent() | ~TestComponent() | ||||
| { | { | ||||
| deleteAllChildren(); | |||||
| } | } | ||||
| void resized() | void resized() | ||||
| @@ -285,8 +278,7 @@ public: | |||||
| document.getCanvasWidth() = getWidth(); | document.getCanvasWidth() = getWidth(); | ||||
| document.getCanvasHeight() = getHeight(); | document.getCanvasHeight() = getHeight(); | ||||
| ComponentEditorCanvas::ComponentHolder::resized(); | |||||
| updateComponents (document, selected); | |||||
| ComponentEditorCanvas::updateComponentsIn (this, document, selected); | |||||
| } | } | ||||
| private: | private: | ||||
| @@ -383,11 +375,11 @@ bool ComponentEditor::perform (const InvocationInfo& info) | |||||
| return true; | return true; | ||||
| case CommandIDs::toFront: | case CommandIDs::toFront: | ||||
| getCanvas()->selectionToFront(); | |||||
| selectionToFront(); | |||||
| return true; | return true; | ||||
| case CommandIDs::toBack: | case CommandIDs::toBack: | ||||
| getCanvas()->selectionToBack(); | |||||
| selectionToBack(); | |||||
| return true; | return true; | ||||
| case CommandIDs::test: | case CommandIDs::test: | ||||
| @@ -403,7 +395,7 @@ bool ComponentEditor::perform (const InvocationInfo& info) | |||||
| return true; | return true; | ||||
| case StandardApplicationCommandIDs::del: | case StandardApplicationCommandIDs::del: | ||||
| getCanvas()->deleteSelection(); | |||||
| deleteSelection(); | |||||
| return true; | return true; | ||||
| default: | default: | ||||
| @@ -26,7 +26,9 @@ | |||||
| #ifndef __JUCE_COMPONENTEDITOR_H_6CAE6B7E__ | #ifndef __JUCE_COMPONENTEDITOR_H_6CAE6B7E__ | ||||
| #define __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 paint (Graphics& g); | ||||
| void resized(); | void resized(); | ||||
| //============================================================================== | |||||
| ComponentDocument& getDocument() const { return *componentDocument; } | 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(); | void test(); | ||||
| EditorCanvasBase::SelectedItems& getSelection() { return selection; } | |||||
| private: | private: | ||||
| class ClassInfoHolder; | class ClassInfoHolder; | ||||
| class LayoutEditorHolder; | class LayoutEditorHolder; | ||||
| @@ -65,6 +75,7 @@ private: | |||||
| Project* project; | Project* project; | ||||
| ComponentDocument* componentDocument; | ComponentDocument* componentDocument; | ||||
| EditorCanvasBase::SelectedItems selection; | |||||
| TabbedComponent* tabs; | TabbedComponent* tabs; | ||||
| ClassInfoHolder* classInfoHolder; | ClassInfoHolder* classInfoHolder; | ||||
| @@ -26,112 +26,247 @@ | |||||
| #ifndef __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__ | #ifndef __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__ | ||||
| #define __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 Timer | ||||
| { | { | ||||
| public: | 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: | 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__ | #define __JUCER_COMPONENTEDITORTOOLBAR_H_6B5CA931__ | ||||
| //============================================================================== | |||||
| class ComponentEditorToolbarFactory : public ToolbarItemFactory | class ComponentEditorToolbarFactory : public ToolbarItemFactory | ||||
| { | { | ||||
| public: | public: | ||||
| @@ -26,8 +26,6 @@ | |||||
| #ifndef __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__ | #ifndef __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__ | ||||
| #define __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__ | #define __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__ | ||||
| #include "../jucer_JucerTreeViewBase.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| namespace ComponentEditorTreeView | namespace ComponentEditorTreeView | ||||
| @@ -41,12 +39,12 @@ namespace ComponentEditorTreeView | |||||
| Base (ComponentEditor& editor_) | Base (ComponentEditor& editor_) | ||||
| : editor (editor_) | : editor (editor_) | ||||
| { | { | ||||
| editor.getCanvas()->getSelection().addChangeListener (this); | |||||
| editor.getSelection().addChangeListener (this); | |||||
| } | } | ||||
| ~Base() | ~Base() | ||||
| { | { | ||||
| editor.getCanvas()->getSelection().removeChangeListener (this); | |||||
| editor.getSelection().removeChangeListener (this); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -78,16 +76,16 @@ namespace ComponentEditorTreeView | |||||
| void itemSelectionChanged (bool isNowSelected) | void itemSelectionChanged (bool isNowSelected) | ||||
| { | { | ||||
| if (isNowSelected) | if (isNowSelected) | ||||
| editor.getCanvas()->getSelection().addToSelection (getItemId()); | |||||
| editor.getSelection().addToSelection (getItemId()); | |||||
| else | else | ||||
| editor.getCanvas()->getSelection().deselect (getItemId()); | |||||
| editor.getSelection().deselect (getItemId()); | |||||
| } | } | ||||
| void changeListenerCallback (void*) { updateSelectionState(); } | void changeListenerCallback (void*) { updateSelectionState(); } | ||||
| void updateSelectionState() | void updateSelectionState() | ||||
| { | { | ||||
| setSelected (editor.getCanvas()->getSelection().isSelected (getItemId()), false); | |||||
| setSelected (editor.getSelection().isSelected (getItemId()), false); | |||||
| } | } | ||||
| bool isMissing() { return 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; } | bool mightContainSubItems() { return false; } | ||||
| void refreshSubItems() {} | void refreshSubItems() {} | ||||
| const String getDisplayName() const { return getRenamingName(); } | 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(); } | Image* getIcon() const { return LookAndFeel::getDefaultLookAndFeel().getDefaultDocumentFileImage(); } | ||||
| @@ -218,7 +216,7 @@ namespace ComponentEditorTreeView | |||||
| void valueTreePropertyChanged (ValueTree& tree, const var::identifier& property) | void valueTreePropertyChanged (ValueTree& tree, const var::identifier& property) | ||||
| { | { | ||||
| if (property == ComponentDocument::markerNameProperty) | |||||
| if (property == MarkerListBase::getMarkerNameProperty()) | |||||
| repaintItem(); | repaintItem(); | ||||
| } | } | ||||
| @@ -24,49 +24,51 @@ | |||||
| */ | */ | ||||
| #include "../../jucer_Headers.h" | #include "../../jucer_Headers.h" | ||||
| #include "jucer_DrawableObjectComponent.h" | |||||
| #include "jucer_DrawableEditor.h" | |||||
| #include "../../model/Drawable/jucer_DrawableDocument.h" | |||||
| #include "../jucer_JucerTreeViewBase.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: | 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: | private: | ||||
| DrawableEditorToolbarFactory toolbarFactory; | |||||
| DrawableEditor& editor; | DrawableEditor& editor; | ||||
| TreeView* tree; | |||||
| }; | }; | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -81,12 +83,8 @@ DrawableEditor::DrawableEditor (OpenDocumentManager::Document* document, | |||||
| setOpaque (true); | 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() | DrawableEditor::~DrawableEditor() | ||||
| @@ -94,11 +92,6 @@ DrawableEditor::~DrawableEditor() | |||||
| deleteAllChildren(); | deleteAllChildren(); | ||||
| } | } | ||||
| int64 DrawableEditor::getHashForNode (const ValueTree& node) | |||||
| { | |||||
| return node ["id"].toString().hashCode64(); | |||||
| } | |||||
| void DrawableEditor::paint (Graphics& g) | void DrawableEditor::paint (Graphics& g) | ||||
| { | { | ||||
| g.fillAll (Colours::white); | g.fillAll (Colours::white); | ||||
| @@ -106,117 +99,5 @@ void DrawableEditor::paint (Graphics& g) | |||||
| void DrawableEditor::resized() | 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__ | #define __JUCER_DRAWABLEEDITOR_JUCEHEADER__ | ||||
| #include "../jucer_DocumentEditorComponent.h" | #include "../jucer_DocumentEditorComponent.h" | ||||
| class DrawableObjectComponent; | |||||
| #include "../Editor Base/jucer_EditorCanvas.h" | |||||
| class DrawableEditorCanvas; | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -38,8 +39,7 @@ class DrawableEditor : public DocumentEditorComponent | |||||
| public: | public: | ||||
| //============================================================================== | //============================================================================== | ||||
| DrawableEditor (OpenDocumentManager::Document* document, | DrawableEditor (OpenDocumentManager::Document* document, | ||||
| Project* project, | |||||
| DrawableDocument* drawableDocument); | |||||
| Project* project, DrawableDocument* drawableDocument); | |||||
| ~DrawableEditor(); | ~DrawableEditor(); | ||||
| void paint (Graphics& g); | void paint (Graphics& g); | ||||
| @@ -47,51 +47,19 @@ public: | |||||
| DrawableDocument& getDocument() const { return *drawableDocument; } | 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 | juce_UseDebuggingNewOperator | ||||
| private: | private: | ||||
| friend class Canvas; | |||||
| Project* project; | Project* project; | ||||
| DrawableDocument* drawableDocument; | 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__ | #ifndef __JUCER_DRAWABLETREEVIEWITEM_JUCEHEADER__ | ||||
| #define __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_) | : editor (editor_), node (drawableRoot), typeName (typeName_) | ||||
| { | { | ||||
| node.addListener (this); | node.addListener (this); | ||||
| editor.selectedItems.addChangeListener (this); | |||||
| editor.getSelection().addChangeListener (this); | |||||
| } | } | ||||
| public: | public: | ||||
| @@ -77,7 +74,7 @@ public: | |||||
| ~DrawableTreeViewItem() | ~DrawableTreeViewItem() | ||||
| { | { | ||||
| editor.selectedItems.removeChangeListener (this); | |||||
| editor.getSelection().removeChangeListener (this); | |||||
| node.removeListener (this); | node.removeListener (this); | ||||
| } | } | ||||
| @@ -133,7 +130,7 @@ public: | |||||
| if (openness != 0) | if (openness != 0) | ||||
| restoreOpennessState (*openness); | restoreOpennessState (*openness); | ||||
| editor.selectedItems.changed(); | |||||
| editor.getSelection().changed(); | |||||
| } | } | ||||
| const String getDisplayName() const | const String getDisplayName() const | ||||
| @@ -169,23 +166,17 @@ public: | |||||
| void itemSelectionChanged (bool isNowSelected) | 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*) | void changeListenerCallback (void*) | ||||
| { | { | ||||
| setSelected (editor.selectedItems.isSelected (DrawableEditor::getHashForNode (node)), false); | |||||
| setSelected (editor.getSelection().isSelected (DrawableDocument::getIdFor (node)), false); | |||||
| } | } | ||||
| const String getTooltip() | 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: | 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_), | : canvas (canvas_), | ||||
| snapGuideParentComp (snapGuideParentComp_), | snapGuideParentComp (snapGuideParentComp_), | ||||
| zone (zone_), | zone (zone_), | ||||
| mouseDownPos (e.getPosition()) | mouseDownPos (e.getPosition()) | ||||
| { | { | ||||
| } | |||||
| ~EditorDragOperation() | |||||
| { | |||||
| } | |||||
| void initialise (const Array<ValueTree>& objects, | |||||
| const Array<ValueTree>& objectsToSnapTo) | |||||
| { | |||||
| draggedObjects = objects; | |||||
| int i; | 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()) | if (zone.isDraggingWholeObject() || zone.isDraggingLeftEdge()) | ||||
| verticalSnapPositions.add (SnapLine (floatPos.getX(), floatPos.getY(), floatPos.getBottom())); | verticalSnapPositions.add (SnapLine (floatPos.getX(), floatPos.getY(), floatPos.getBottom())); | ||||
| @@ -69,26 +80,24 @@ public: | |||||
| if (isDraggingLeftRight()) | if (isDraggingLeftRight()) | ||||
| { | { | ||||
| verticalSnapTargets.add (SnapLine (0, -100.0f, 10000.0f)); | 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())) | 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()) | if (isDraggingUpDown()) | ||||
| { | { | ||||
| horizontalSnapTargets.add (SnapLine (0, -100.0f, 10000.0f)); | 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())) | 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()) | if (isDraggingLeftRight()) | ||||
| { | { | ||||
| @@ -112,12 +121,7 @@ public: | |||||
| mergeSnapLines (verticalSnapTargets); | mergeSnapLines (verticalSnapTargets); | ||||
| mergeSnapLines (horizontalSnapTargets); | mergeSnapLines (horizontalSnapTargets); | ||||
| getDocument().beginNewTransaction(); | |||||
| } | |||||
| ~DragOperation() | |||||
| { | |||||
| getDocument().beginNewTransaction(); | |||||
| getUndoManager().beginNewTransaction(); | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -133,10 +137,10 @@ public: | |||||
| }; | }; | ||||
| //============================================================================== | //============================================================================== | ||||
| class AlignmentHintComponent : public OverlayItemComponent | |||||
| class AlignmentHintComponent : public EditorCanvasBase::OverlayItemComponent | |||||
| { | { | ||||
| public: | 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_) | : OverlayItemComponent (canvas_), line (line_), isVertical (isVertical_) | ||||
| { | { | ||||
| const int extraEndLength = 5; | const int extraEndLength = 5; | ||||
| @@ -167,7 +171,7 @@ public: | |||||
| //============================================================================== | //============================================================================== | ||||
| void drag (const MouseEvent& e) | void drag (const MouseEvent& e) | ||||
| { | { | ||||
| getDocument().getUndoManager()->undoCurrentTransactionOnly(); | |||||
| getUndoManager().undoCurrentTransactionOnly(); | |||||
| // (can't use getOffsetFromDragStart() because of auto-scrolling) | // (can't use getOffsetFromDragStart() because of auto-scrolling) | ||||
| Point<int> distance (e.getPosition() - mouseDownPos); | Point<int> distance (e.getPosition() - mouseDownPos); | ||||
| @@ -188,8 +192,8 @@ public: | |||||
| // the coords are relative to each other.. | // the coords are relative to each other.. | ||||
| bool anyUpdated = false; | 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; | anyUpdated = true; | ||||
| if (! anyUpdated) | 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: | private: | ||||
| //============================================================================== | //============================================================================== | ||||
| ComponentEditorCanvas& canvas; | |||||
| Array <ValueTree> draggedComponents; | |||||
| Array <Rectangle<int> > originalPositions; | |||||
| Array <ValueTree> draggedObjects; | |||||
| Array <Rectangle<float> > originalPositions; | |||||
| Array <SnapLine> verticalSnapPositions, horizontalSnapPositions; | Array <SnapLine> verticalSnapPositions, horizontalSnapPositions; | ||||
| Array <SnapLine> verticalSnapTargets, horizontalSnapTargets; | Array <SnapLine> verticalSnapTargets, horizontalSnapTargets; | ||||
| const ResizableBorderComponent::Zone zone; | const ResizableBorderComponent::Zone zone; | ||||
| @@ -225,17 +237,6 @@ private: | |||||
| Component* snapGuideParentComp; | Component* snapGuideParentComp; | ||||
| Point<int> mouseDownPos; | 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) | static void mergeSnapLines (Array <SnapLine>& lines) | ||||
| { | { | ||||
| for (int i = lines.size(); --i > 0;) | for (int i = lines.size(); --i > 0;) | ||||
| @@ -329,6 +330,9 @@ private: | |||||
| bool isDraggingLeftRight() const { return zone.isDraggingWholeObject() || zone.isDraggingLeftEdge() || zone.isDraggingRightEdge(); } | bool isDraggingLeftRight() const { return zone.isDraggingWholeObject() || zone.isDraggingLeftEdge() || zone.isDraggingRightEdge(); } | ||||
| bool isDraggingUpDown() const { return zone.isDraggingWholeObject() || zone.isDraggingTopEdge() || zone.isDraggingBottomEdge(); } | 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__ | #ifndef __JUCER_GROUPINFORMATIONCOMPONENT_JUCEHEADER__ | ||||
| #define __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" | #include "jucer_ItemPreviewComponent.h" | ||||
| @@ -24,12 +24,12 @@ | |||||
| */ | */ | ||||
| #include "jucer_ProjectContentComponent.h" | #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_ProjectInformationComponent.h" | ||||
| #include "jucer_TreeViewTypes.h" | #include "jucer_TreeViewTypes.h" | ||||
| #include "../model/jucer_ProjectExporter.h" | |||||
| #include "../../model/Project/jucer_ProjectExporter.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -26,8 +26,8 @@ | |||||
| #ifndef __JUCER_PROJECTCONTENTCOMPONENT_JUCEHEADER__ | #ifndef __JUCER_PROJECTCONTENTCOMPONENT_JUCEHEADER__ | ||||
| #define __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... | //[Headers] You can add your own extra header files here... | ||||
| #include "../model/jucer_ProjectExporter.h" | |||||
| #include "../../model/Project/jucer_ProjectExporter.h" | |||||
| //[/Headers] | //[/Headers] | ||||
| #include "jucer_ProjectInformationComponent.h" | #include "jucer_ProjectInformationComponent.h" | ||||
| @@ -23,8 +23,8 @@ | |||||
| #define __JUCER_PROJECTINFORMATIONCOMPONENT_JUCEHEADER__ | #define __JUCER_PROJECTINFORMATIONCOMPONENT_JUCEHEADER__ | ||||
| //[Headers] -- You can add your own extra header files here -- | //[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] | //[/Headers] | ||||
| @@ -24,7 +24,7 @@ | |||||
| */ | */ | ||||
| #include "jucer_ProjectTreeViewBase.h" | #include "jucer_ProjectTreeViewBase.h" | ||||
| #include "jucer_OpenDocumentManager.h" | |||||
| #include "../jucer_OpenDocumentManager.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -26,11 +26,12 @@ | |||||
| #ifndef __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__ | #ifndef __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__ | ||||
| #define __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_ProjectContentComponent.h" | ||||
| #include "jucer_JucerTreeViewBase.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| class ProjectTreeViewBase : public JucerTreeViewBase, | class ProjectTreeViewBase : public JucerTreeViewBase, | ||||
| @@ -26,10 +26,10 @@ | |||||
| #include "jucer_TreeViewTypes.h" | #include "jucer_TreeViewTypes.h" | ||||
| #include "jucer_ProjectInformationComponent.h" | #include "jucer_ProjectInformationComponent.h" | ||||
| #include "jucer_GroupInformationComponent.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_DocumentEditorComponent.h" | ||||
| #include "jucer_ProjectContentComponent.h" | |||||
| #include "Project Editor/jucer_ProjectContentComponent.h" | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -26,8 +26,8 @@ | |||||
| #include "../jucer_Headers.h" | #include "../jucer_Headers.h" | ||||
| #include "jucer_MainWindow.h" | #include "jucer_MainWindow.h" | ||||
| #include "jucer_OpenDocumentManager.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__ | #ifndef __JUCER_MAINWINDOW_JUCEHEADER__ | ||||
| #define __JUCER_MAINWINDOW_JUCEHEADER__ | #define __JUCER_MAINWINDOW_JUCEHEADER__ | ||||
| #include "jucer_ProjectContentComponent.h" | |||||
| #include "Project Editor/jucer_ProjectContentComponent.h" | |||||
| #include "Component Editor/jucer_ComponentEditor.h" | #include "Component Editor/jucer_ComponentEditor.h" | ||||
| //============================================================================== | //============================================================================== | ||||
| @@ -24,9 +24,9 @@ | |||||
| */ | */ | ||||
| #include "jucer_OpenDocumentManager.h" | #include "jucer_OpenDocumentManager.h" | ||||
| #include "jucer_SourceCodeEditor.h" | |||||
| #include "Code Editor/jucer_SourceCodeEditor.h" | |||||
| #include "Drawable Editor/jucer_DrawableEditor.h" | #include "Drawable Editor/jucer_DrawableEditor.h" | ||||
| #include "jucer_ItemPreviewComponent.h" | |||||
| #include "Project Editor/jucer_ItemPreviewComponent.h" | |||||
| #include "Component Editor/jucer_ComponentEditor.h" | #include "Component Editor/jucer_ComponentEditor.h" | ||||
| @@ -26,8 +26,8 @@ | |||||
| #ifndef __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__ | #ifndef __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__ | ||||
| #define __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; | 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), | : left (rect.getX(), true), | ||||
| right (rect.getWidth(), componentName + ".left", true), | right (rect.getWidth(), componentName + ".left", true), | ||||
| top (rect.getY(), false), | 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); | 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); | left.moveToAbsolute (newPos.getX(), markerResolver); | ||||
| right.moveToAbsolute (newPos.getRight(), markerResolver); | right.moveToAbsolute (newPos.getRight(), markerResolver); | ||||
| @@ -146,12 +146,12 @@ class RectangleCoordinates | |||||
| public: | public: | ||||
| //============================================================================== | //============================================================================== | ||||
| RectangleCoordinates(); | RectangleCoordinates(); | ||||
| explicit RectangleCoordinates (const Rectangle<int>& rect, const String& componentName); | |||||
| explicit RectangleCoordinates (const Rectangle<float>& rect, const String& componentName); | |||||
| explicit RectangleCoordinates (const String& stringVersion); | explicit RectangleCoordinates (const String& stringVersion); | ||||
| //============================================================================== | //============================================================================== | ||||
| const Rectangle<int> resolve (const Coordinate::MarkerResolver& markerResolver) const; | 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; | const String toString() const; | ||||
| Coordinate left, right, top, bottom; | 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; | 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, | ResizableBorderComponent::ResizableBorderComponent (Component* const componentToResize, | ||||
| ComponentBoundsConstrainer* const constrainer_) | ComponentBoundsConstrainer* const constrainer_) | ||||
| : component (componentToResize), | : component (componentToResize), | ||||
| @@ -6378,7 +6378,7 @@ public: | |||||
| Value (const Value& other); | Value (const Value& other); | ||||
| Value (const var& initialValue); | |||||
| explicit Value (const var& initialValue); | |||||
| ~Value(); | ~Value(); | ||||
| @@ -23180,6 +23180,9 @@ public: | |||||
| const Rectangle<int> resizeRectangleBy (Rectangle<int> original, | const Rectangle<int> resizeRectangleBy (Rectangle<int> original, | ||||
| const Point<int>& distance) const throw(); | 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; } | int getZoneFlags() const throw() { return zone; } | ||||
| private: | private: | ||||
| @@ -65,7 +65,7 @@ public: | |||||
| Value (const Value& other); | Value (const Value& other); | ||||
| /** Creates a Value that is set to the specified value. */ | /** Creates a Value that is set to the specified value. */ | ||||
| Value (const var& initialValue); | |||||
| explicit Value (const var& initialValue); | |||||
| /** Destructor. */ | /** Destructor. */ | ||||
| ~Value(); | ~Value(); | ||||
| @@ -110,6 +110,25 @@ const Rectangle<int> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangl | |||||
| return b; | 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, | ResizableBorderComponent::ResizableBorderComponent (Component* const componentToResize, | ||||
| @@ -141,6 +141,12 @@ public: | |||||
| const Rectangle<int> resizeRectangleBy (Rectangle<int> original, | const Rectangle<int> resizeRectangleBy (Rectangle<int> original, | ||||
| const Point<int>& distance) const throw(); | 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. */ | /** Returns the raw flags for this zone. */ | ||||
| int getZoneFlags() const throw() { return zone; } | int getZoneFlags() const throw() { return zone; } | ||||