Browse Source

Made Value constructor explicit. Jucer development.

tags/2021-05-28
Julian Storer 15 years ago
parent
commit
7cf5140eb2
85 changed files with 3018 additions and 2713 deletions
  1. +29
    -29
      extras/Jucer (experimental)/Builds/Linux/Makefile
  2. +168
    -148
      extras/Jucer (experimental)/Builds/MacOSX/The Jucer.xcodeproj/project.pbxproj
  3. +72
    -56
      extras/Jucer (experimental)/Builds/VisualStudio2005/The Jucer.vcproj
  4. +72
    -56
      extras/Jucer (experimental)/Builds/VisualStudio2008/The Jucer.vcproj
  5. +131
    -111
      extras/Jucer (experimental)/Jucer.jucer
  6. +4
    -0
      extras/Jucer (experimental)/Source/jucer_Headers.h
  7. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComboBox.h
  8. +4
    -2
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComponentTypeManager.cpp
  9. +2
    -2
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComponentTypeManager.h
  10. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComponentTypes.h
  11. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_GenericComponent.h
  12. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_GroupComponent.h
  13. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_JucerComponent.h
  14. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_Label.h
  15. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_Slider.h
  16. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_TabbedComponent.h
  17. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_TextButton.h
  18. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_TextEditor.h
  19. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_ToggleButton.h
  20. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/Types/jucer_Viewport.h
  21. +0
    -0
      extras/Jucer (experimental)/Source/model/Component/jucer_CodeGenerator.cpp
  22. +2
    -2
      extras/Jucer (experimental)/Source/model/Component/jucer_CodeGenerator.h
  23. +12
    -70
      extras/Jucer (experimental)/Source/model/Component/jucer_ComponentDocument.cpp
  24. +7
    -24
      extras/Jucer (experimental)/Source/model/Component/jucer_ComponentDocument.h
  25. +406
    -0
      extras/Jucer (experimental)/Source/model/Drawable/jucer_DrawableDocument.cpp
  26. +51
    -9
      extras/Jucer (experimental)/Source/model/Drawable/jucer_DrawableDocument.h
  27. +2
    -2
      extras/Jucer (experimental)/Source/model/Project/jucer_NewFileWizard.cpp
  28. +1
    -1
      extras/Jucer (experimental)/Source/model/Project/jucer_NewFileWizard.h
  29. +1
    -1
      extras/Jucer (experimental)/Source/model/Project/jucer_Project.cpp
  30. +1
    -1
      extras/Jucer (experimental)/Source/model/Project/jucer_Project.h
  31. +0
    -0
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExport_MSVC.h
  32. +0
    -0
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExport_Make.h
  33. +0
    -0
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExport_XCode.h
  34. +0
    -0
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExporter.cpp
  35. +1
    -1
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExporter.h
  36. +0
    -0
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectSaver.h
  37. +0
    -0
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectWizard.cpp
  38. +1
    -1
      extras/Jucer (experimental)/Source/model/Project/jucer_ProjectWizard.h
  39. +2
    -2
      extras/Jucer (experimental)/Source/model/Project/jucer_ResourceFile.cpp
  40. +1
    -1
      extras/Jucer (experimental)/Source/model/Project/jucer_ResourceFile.h
  41. +0
    -253
      extras/Jucer (experimental)/Source/model/jucer_DrawableDocument.cpp
  42. +1
    -1
      extras/Jucer (experimental)/Source/ui/Code Editor/jucer_SourceCodeEditor.cpp
  43. +2
    -2
      extras/Jucer (experimental)/Source/ui/Code Editor/jucer_SourceCodeEditor.h
  44. +105
    -113
      extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditor.cpp
  45. +14
    -3
      extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditor.h
  46. +0
    -1122
      extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorCanvas.cpp
  47. +211
    -76
      extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorCanvas.h
  48. +1
    -0
      extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorToolbar.h
  49. +8
    -10
      extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorTreeView.h
  50. +28
    -147
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditor.cpp
  51. +7
    -39
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditor.h
  52. +199
    -0
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditorCanvas.h
  53. +92
    -0
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditorToolbar.h
  54. +9
    -18
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditorTreeView.h
  55. +0
    -322
      extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h
  56. +853
    -0
      extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorCanvas.cpp
  57. +138
    -0
      extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorCanvas.h
  58. +57
    -53
      extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorDragOperation.h
  59. +163
    -0
      extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorPanel.h
  60. +0
    -0
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_GroupInformationComponent.cpp
  61. +2
    -2
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_GroupInformationComponent.h
  62. +1
    -1
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ItemPreviewComponent.cpp
  63. +0
    -0
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ItemPreviewComponent.h
  64. +4
    -4
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectContentComponent.cpp
  65. +2
    -2
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectContentComponent.h
  66. +1
    -1
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectInformationComponent.cpp
  67. +2
    -2
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectInformationComponent.h
  68. +1
    -1
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectTreeViewBase.cpp
  69. +5
    -4
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectTreeViewBase.h
  70. +4
    -4
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_TreeViewTypes.cpp
  71. +0
    -0
      extras/Jucer (experimental)/Source/ui/Project Editor/jucer_TreeViewTypes.h
  72. +1
    -1
      extras/Jucer (experimental)/Source/ui/jucer_DocumentEditorComponent.cpp
  73. +2
    -2
      extras/Jucer (experimental)/Source/ui/jucer_MainWindow.cpp
  74. +1
    -1
      extras/Jucer (experimental)/Source/ui/jucer_MainWindow.h
  75. +2
    -2
      extras/Jucer (experimental)/Source/ui/jucer_OpenDocumentManager.cpp
  76. +2
    -2
      extras/Jucer (experimental)/Source/ui/jucer_OpenDocumentManager.h
  77. +2
    -2
      extras/Jucer (experimental)/Source/utility/jucer_Coordinate.cpp
  78. +2
    -2
      extras/Jucer (experimental)/Source/utility/jucer_Coordinate.h
  79. +0
    -0
      extras/Jucer (experimental)/Source/utility/jucer_CoordinatePropertyComponent.h
  80. +76
    -0
      extras/Jucer (experimental)/Source/utility/jucer_MarkerListBase.h
  81. +20
    -0
      juce_amalgamated.cpp
  82. +4
    -1
      juce_amalgamated.h
  83. +1
    -1
      src/containers/juce_Value.h
  84. +19
    -0
      src/gui/components/layout/juce_ResizableBorderComponent.cpp
  85. +6
    -0
      src/gui/components/layout/juce_ResizableBorderComponent.h

+ 29
- 29
extras/Jucer (experimental)/Builds/Linux/Makefile View File

@@ -43,30 +43,30 @@ ifeq ($(CONFIG),Release)
endif
OBJECTS := \
$(OBJDIR)/jucer_ComponentTypeManager.o \
$(OBJDIR)/jucer_ComponentDocument.o \
$(OBJDIR)/jucer_CodeGenerator.o \
$(OBJDIR)/jucer_Coordinate.o \
$(OBJDIR)/jucer_ComponentDocument.o \
$(OBJDIR)/jucer_ComponentTypeManager.o \
$(OBJDIR)/jucer_DrawableDocument.o \
$(OBJDIR)/jucer_NewFileWizard.o \
$(OBJDIR)/jucer_Project.o \
$(OBJDIR)/jucer_ProjectExporter.o \
$(OBJDIR)/jucer_ProjectWizard.o \
$(OBJDIR)/jucer_ResourceFile.o \
$(OBJDIR)/jucer_SourceCodeEditor.o \
$(OBJDIR)/jucer_ComponentEditor.o \
$(OBJDIR)/jucer_ComponentEditorCanvas.o \
$(OBJDIR)/jucer_DrawableEditor.o \
$(OBJDIR)/jucer_EditorCanvas.o \
$(OBJDIR)/jucer_DocumentEditorComponent.o \
$(OBJDIR)/jucer_GroupInformationComponent.o \
$(OBJDIR)/jucer_ItemPreviewComponent.o \
$(OBJDIR)/jucer_JucerTreeViewBase.o \
$(OBJDIR)/jucer_MainWindow.o \
$(OBJDIR)/jucer_OpenDocumentManager.o \
$(OBJDIR)/jucer_GroupInformationComponent.o \
$(OBJDIR)/jucer_ItemPreviewComponent.o \
$(OBJDIR)/jucer_ProjectContentComponent.o \
$(OBJDIR)/jucer_ProjectInformationComponent.o \
$(OBJDIR)/jucer_ProjectTreeViewBase.o \
$(OBJDIR)/jucer_SourceCodeEditor.o \
$(OBJDIR)/jucer_TreeViewTypes.o \
$(OBJDIR)/jucer_Coordinate.o \
$(OBJDIR)/jucer_StoredSettings.o \
$(OBJDIR)/jucer_UtilityFunctions.o \
$(OBJDIR)/jucer_Main.o \
@@ -91,52 +91,52 @@ clean:
-@rm -rf $(OBJDIR)/*
-@rm -rf $(OBJDIR)
$(OBJDIR)/jucer_ComponentTypeManager.o: ../../Source/model/Component\ Types/jucer_ComponentTypeManager.cpp
$(OBJDIR)/jucer_CodeGenerator.o: ../../Source/model/Component/jucer_CodeGenerator.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ComponentDocument.o: ../../Source/model/jucer_ComponentDocument.cpp
$(OBJDIR)/jucer_ComponentDocument.o: ../../Source/model/Component/jucer_ComponentDocument.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_CodeGenerator.o: ../../Source/model/jucer_CodeGenerator.cpp
$(OBJDIR)/jucer_ComponentTypeManager.o: ../../Source/model/Component/Types/jucer_ComponentTypeManager.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_Coordinate.o: ../../Source/model/jucer_Coordinate.cpp
$(OBJDIR)/jucer_DrawableDocument.o: ../../Source/model/Drawable/jucer_DrawableDocument.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_DrawableDocument.o: ../../Source/model/jucer_DrawableDocument.cpp
$(OBJDIR)/jucer_NewFileWizard.o: ../../Source/model/Project/jucer_NewFileWizard.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_NewFileWizard.o: ../../Source/model/jucer_NewFileWizard.cpp
$(OBJDIR)/jucer_Project.o: ../../Source/model/Project/jucer_Project.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_Project.o: ../../Source/model/jucer_Project.cpp
$(OBJDIR)/jucer_ProjectExporter.o: ../../Source/model/Project/jucer_ProjectExporter.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectExporter.o: ../../Source/model/jucer_ProjectExporter.cpp
$(OBJDIR)/jucer_ProjectWizard.o: ../../Source/model/Project/jucer_ProjectWizard.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectWizard.o: ../../Source/model/jucer_ProjectWizard.cpp
$(OBJDIR)/jucer_ResourceFile.o: ../../Source/model/Project/jucer_ResourceFile.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ResourceFile.o: ../../Source/model/jucer_ResourceFile.cpp
$(OBJDIR)/jucer_SourceCodeEditor.o: ../../Source/ui/Code\ Editor/jucer_SourceCodeEditor.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
@@ -146,12 +146,12 @@ $(OBJDIR)/jucer_ComponentEditor.o: ../../Source/ui/Component\ Editor/jucer_Compo
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ComponentEditorCanvas.o: ../../Source/ui/Component\ Editor/jucer_ComponentEditorCanvas.cpp
$(OBJDIR)/jucer_DrawableEditor.o: ../../Source/ui/Drawable\ Editor/jucer_DrawableEditor.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_DrawableEditor.o: ../../Source/ui/Drawable\ Editor/jucer_DrawableEditor.cpp
$(OBJDIR)/jucer_EditorCanvas.o: ../../Source/ui/Editor\ Base/jucer_EditorCanvas.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
@@ -161,52 +161,52 @@ $(OBJDIR)/jucer_DocumentEditorComponent.o: ../../Source/ui/jucer_DocumentEditorC
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_GroupInformationComponent.o: ../../Source/ui/jucer_GroupInformationComponent.cpp
$(OBJDIR)/jucer_JucerTreeViewBase.o: ../../Source/ui/jucer_JucerTreeViewBase.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ItemPreviewComponent.o: ../../Source/ui/jucer_ItemPreviewComponent.cpp
$(OBJDIR)/jucer_MainWindow.o: ../../Source/ui/jucer_MainWindow.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_JucerTreeViewBase.o: ../../Source/ui/jucer_JucerTreeViewBase.cpp
$(OBJDIR)/jucer_OpenDocumentManager.o: ../../Source/ui/jucer_OpenDocumentManager.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_MainWindow.o: ../../Source/ui/jucer_MainWindow.cpp
$(OBJDIR)/jucer_GroupInformationComponent.o: ../../Source/ui/Project\ Editor/jucer_GroupInformationComponent.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_OpenDocumentManager.o: ../../Source/ui/jucer_OpenDocumentManager.cpp
$(OBJDIR)/jucer_ItemPreviewComponent.o: ../../Source/ui/Project\ Editor/jucer_ItemPreviewComponent.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectContentComponent.o: ../../Source/ui/jucer_ProjectContentComponent.cpp
$(OBJDIR)/jucer_ProjectContentComponent.o: ../../Source/ui/Project\ Editor/jucer_ProjectContentComponent.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectInformationComponent.o: ../../Source/ui/jucer_ProjectInformationComponent.cpp
$(OBJDIR)/jucer_ProjectInformationComponent.o: ../../Source/ui/Project\ Editor/jucer_ProjectInformationComponent.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_ProjectTreeViewBase.o: ../../Source/ui/jucer_ProjectTreeViewBase.cpp
$(OBJDIR)/jucer_ProjectTreeViewBase.o: ../../Source/ui/Project\ Editor/jucer_ProjectTreeViewBase.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_SourceCodeEditor.o: ../../Source/ui/jucer_SourceCodeEditor.cpp
$(OBJDIR)/jucer_TreeViewTypes.o: ../../Source/ui/Project\ Editor/jucer_TreeViewTypes.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"
$(OBJDIR)/jucer_TreeViewTypes.o: ../../Source/ui/jucer_TreeViewTypes.cpp
$(OBJDIR)/jucer_Coordinate.o: ../../Source/utility/jucer_Coordinate.cpp
-@mkdir -p $(OBJDIR)
@echo $(notdir $<)
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<"


+ 168
- 148
extras/Jucer (experimental)/Builds/MacOSX/The Jucer.xcodeproj/project.pbxproj View File

@@ -17,30 +17,30 @@
DBE3CE9482B19CF1AE700805 = { isa = PBXBuildFile; fileRef = 23CF69B4C644D1E6E61E5C82; };
93C9F3F27602A33DDC9C2250 = { isa = PBXBuildFile; fileRef = 2767E1D082874D301D5D5F43; };
2E6836738CE7EB452FDC7E9A = { isa = PBXBuildFile; fileRef = D9FB1A5365FEEB854A0FF7BF; };
52D75B8B0F52DD4F37A4B1C0 = { isa = PBXBuildFile; fileRef = 82A1EC47692975C7031B3973; };
CD4226951C3F7FE19CF8A7CE = { isa = PBXBuildFile; fileRef = 2D6D6985B452EA0B67A18914; };
8E859D542404B684D5E1545F = { isa = PBXBuildFile; fileRef = 42CEC4195577AE91AA6CBA7F; };
1DF9688E29753A0459E6C32A = { isa = PBXBuildFile; fileRef = 45C80436FD5A8438D0E6BE17; };
1174D3512AF8207950094C56 = { isa = PBXBuildFile; fileRef = FF625CB50FB5C3536BA40604; };
087CCE9E7146F1EC4F241254 = { isa = PBXBuildFile; fileRef = DA142548FCADFAC50648ED3C; };
E9935BFB0EFA8CCCD41DC08E = { isa = PBXBuildFile; fileRef = D47A40CB3CF6AAE14B3C7796; };
60CDC1358E84801B6526E434 = { isa = PBXBuildFile; fileRef = FE9A53032395E717F54AE85B; };
EEC6FC8E546C88C825411DB2 = { isa = PBXBuildFile; fileRef = 0AD266A3E698D40DCD88A432; };
B2B821DE12F1679A3ADA597A = { isa = PBXBuildFile; fileRef = DBE9A3BB502125C5D3433AE7; };
A7EB756F566FB773ABE3DFA9 = { isa = PBXBuildFile; fileRef = 1BCF8B6367CCC73AEEF03818; };
061C981D0E9FB70DE5A3D32C = { isa = PBXBuildFile; fileRef = 829C5DA65FB46B99756428C5; };
FEDBCD721085272D356BBAEB = { isa = PBXBuildFile; fileRef = D08D9DB99315F76093CF6EE6; };
268807D7091702D29033CC27 = { isa = PBXBuildFile; fileRef = B1471E8698D193FBCF0DD13D; };
06838545183964D8C1E60530 = { isa = PBXBuildFile; fileRef = 9DCB32BBD7053ACCB598CE79; };
048D33BDE7413EFE05D09901 = { isa = PBXBuildFile; fileRef = 4179D4C7BF616A4A3C3E11CA; };
9DA1913A62297D7111E0A6C9 = { isa = PBXBuildFile; fileRef = 48A4236550741B9D05208C60; };
44C2E5705EEA4F01309D8960 = { isa = PBXBuildFile; fileRef = 9034F31FCBD5A2A297427537; };
7C9FFFC0B129F5C3FAEE13E9 = { isa = PBXBuildFile; fileRef = A6D148E4503AAD3DE6DDCD8B; };
33E1A095D656AF109DD54170 = { isa = PBXBuildFile; fileRef = 31F175F277299B3CEA857F96; };
D706C3B5016318D85FE452C2 = { isa = PBXBuildFile; fileRef = 3263F4099F45D6FACD28F08D; };
CDB5102BEFD7C18BD28709F3 = { isa = PBXBuildFile; fileRef = 81D9A078702EFE0A32C037A1; };
E43D00B370F289420379B759 = { isa = PBXBuildFile; fileRef = 82F91CF84A296665177CB79A; };
EFFCA85EFB4F06F1BEB9AB97 = { isa = PBXBuildFile; fileRef = 03E9C079FBBF727D50A2B678; };
944CE0EADAD951F48EC77071 = { isa = PBXBuildFile; fileRef = 3B2C45064E85B3B631D4F921; };
4E8860E0F8680956A6F5B493 = { isa = PBXBuildFile; fileRef = 8F731296532276CBF2B6190D; };
288F5E7A2EC305BB4D8D73D1 = { isa = PBXBuildFile; fileRef = 1E7EDE73A92751752BC90A62; };
2417927E323BFE201D5985B9 = { isa = PBXBuildFile; fileRef = 3C60CAE9481EE0113C15A0B9; };
A1CB18029E09A66E192D9A29 = { isa = PBXBuildFile; fileRef = 17F5B1F00F15DB37EA4A4AEA; };
F8C762CCE16669F76D2209B9 = { isa = PBXBuildFile; fileRef = 118A505BA7079B3C8C9B858B; };
4FF75A3C7DCB9FD245320FE6 = { isa = PBXBuildFile; fileRef = 487D3D6777F8C3E26C0D5887; };
A70AED2E35B809981470A547 = { isa = PBXBuildFile; fileRef = 9170F22B59096F151A9FFFB3; };
4D6C7380B8BB0BA9470C146C = { isa = PBXBuildFile; fileRef = AEE4E1F518A91ABB386CFD9E; };
438FED16CFDB36A4BE1F5F35 = { isa = PBXBuildFile; fileRef = E55B34E6694D69E3DBB107D1; };
33A4BAAD7A79BA63E78CB503 = { isa = PBXBuildFile; fileRef = B4439D672F2977238755E1E2; };
496F7F18FCBE1E212F62E328 = { isa = PBXBuildFile; fileRef = 63C3715BB513E5F84B1159AB; };
BFFA4F695DDFEA8EE6CE7241 = { isa = PBXBuildFile; fileRef = 3E8A127EE612399B57B82B4C; };
C74E7F0701EF10141D5C1D9D = { isa = PBXBuildFile; fileRef = 742E74D389224CCB863822AD; };
54CF219EADAD8E6DC7D20A8E = { isa = PBXBuildFile; fileRef = E4BED7589BF4391ECB067DBC; };
984444E3B2947675DC7D65DA = { isa = PBXBuildFile; fileRef = 1FDE55685608689765ADC578; };
58BF60E87F9A8EDCACC5D1AE = { isa = PBXBuildFile; fileRef = 939E2A7946081DB4D21B89B6; };
5BF87265418D736250283182 = { isa = PBXBuildFile; fileRef = C7ADB43F83A83FFC08921A12; };
DDAB225ABE572196882C3524 = { isa = PBXBuildFile; fileRef = 7A1CD936BD306A6E0BEFB046; };
FA8C72364CDFD2B76F16C0F1 = { isa = PBXBuildFile; fileRef = E3BD76BDB547509885E14DEE; };
6B6B0EBBE899B0ACDCAD92F5 = { isa = PBXBuildFile; fileRef = 0DC331A7B856F30AD266A3E6; };
@@ -62,80 +62,84 @@
D9FB1A5365FEEB854A0FF7BF = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
12E1601866B3489844AFD645 = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Jucer.app; sourceTree = BUILT_PRODUCTS_DIR; };
F4C5CF1AA7EB9298043D89D3 = { isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Info.plist; sourceTree = SOURCE_ROOT; };
82A1EC47692975C7031B3973 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentTypeManager.cpp; path = "../../Source/model/Component Types/jucer_ComponentTypeManager.cpp"; sourceTree = SOURCE_ROOT; };
4F23FF649E7BA3A0F737E3BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypeManager.h; path = "../../Source/model/Component Types/jucer_ComponentTypeManager.h"; sourceTree = SOURCE_ROOT; };
6FD54B7E8992FD692BAA0DC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypes.h; path = "../../Source/model/Component Types/jucer_ComponentTypes.h"; sourceTree = SOURCE_ROOT; };
926FC04F4EAF24C7C4671207 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComboBox.h; path = "../../Source/model/Component Types/jucer_ComboBox.h"; sourceTree = SOURCE_ROOT; };
C6263909812DBE995167932B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GenericComponent.h; path = "../../Source/model/Component Types/jucer_GenericComponent.h"; sourceTree = SOURCE_ROOT; };
6B5504F7274B11DFAD3B2E26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupComponent.h; path = "../../Source/model/Component Types/jucer_GroupComponent.h"; sourceTree = SOURCE_ROOT; };
133385B65A02DF50291B222F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerComponent.h; path = "../../Source/model/Component Types/jucer_JucerComponent.h"; sourceTree = SOURCE_ROOT; };
C64A89EA5C3F0A701F9EBA79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Label.h; path = "../../Source/model/Component Types/jucer_Label.h"; sourceTree = SOURCE_ROOT; };
40716207B98461E05DC46F14 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Slider.h; path = "../../Source/model/Component Types/jucer_Slider.h"; sourceTree = SOURCE_ROOT; };
4A22DE9DF590115F174CA70E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TabbedComponent.h; path = "../../Source/model/Component Types/jucer_TabbedComponent.h"; sourceTree = SOURCE_ROOT; };
E18C99BDD4EF3DFD767F3770 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextButton.h; path = "../../Source/model/Component Types/jucer_TextButton.h"; sourceTree = SOURCE_ROOT; };
1BBF86F1D833DAD4A1503C82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextEditor.h; path = "../../Source/model/Component Types/jucer_TextEditor.h"; sourceTree = SOURCE_ROOT; };
A6FAA90B494DCD7CA5911196 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ToggleButton.h; path = "../../Source/model/Component Types/jucer_ToggleButton.h"; sourceTree = SOURCE_ROOT; };
03AD2BF6C80C6AF47BBDB7E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Viewport.h; path = "../../Source/model/Component Types/jucer_Viewport.h"; sourceTree = SOURCE_ROOT; };
2D6D6985B452EA0B67A18914 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentDocument.cpp; path = ../../Source/model/jucer_ComponentDocument.cpp; sourceTree = SOURCE_ROOT; };
E6CC3A04349F6B227FDAB26F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentDocument.h; path = ../../Source/model/jucer_ComponentDocument.h; sourceTree = SOURCE_ROOT; };
42CEC4195577AE91AA6CBA7F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CodeGenerator.cpp; path = ../../Source/model/jucer_CodeGenerator.cpp; sourceTree = SOURCE_ROOT; };
FE3EB6472027A398A978CBE4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CodeGenerator.h; path = ../../Source/model/jucer_CodeGenerator.h; sourceTree = SOURCE_ROOT; };
45C80436FD5A8438D0E6BE17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Coordinate.cpp; path = ../../Source/model/jucer_Coordinate.cpp; sourceTree = SOURCE_ROOT; };
420E4189E7DE25E9D0D8E5B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Coordinate.h; path = ../../Source/model/jucer_Coordinate.h; sourceTree = SOURCE_ROOT; };
FF625CB50FB5C3536BA40604 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DrawableDocument.cpp; path = ../../Source/model/jucer_DrawableDocument.cpp; sourceTree = SOURCE_ROOT; };
A490098DA6400B3881F336D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableDocument.h; path = ../../Source/model/jucer_DrawableDocument.h; sourceTree = SOURCE_ROOT; };
DA142548FCADFAC50648ED3C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewFileWizard.cpp; path = ../../Source/model/jucer_NewFileWizard.cpp; sourceTree = SOURCE_ROOT; };
765A993B1D7A4750FE92FE21 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewFileWizard.h; path = ../../Source/model/jucer_NewFileWizard.h; sourceTree = SOURCE_ROOT; };
D47A40CB3CF6AAE14B3C7796 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Project.cpp; path = ../../Source/model/jucer_Project.cpp; sourceTree = SOURCE_ROOT; };
FD44D5AD3D019B52485F4EB1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Project.h; path = ../../Source/model/jucer_Project.h; sourceTree = SOURCE_ROOT; };
FE9A53032395E717F54AE85B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectExporter.cpp; path = ../../Source/model/jucer_ProjectExporter.cpp; sourceTree = SOURCE_ROOT; };
C3C2FC6810F53559CAD7B08C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExporter.h; path = ../../Source/model/jucer_ProjectExporter.h; sourceTree = SOURCE_ROOT; };
21B09F5FD350D587F99A48E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_Make.h; path = ../../Source/model/jucer_ProjectExport_Make.h; sourceTree = SOURCE_ROOT; };
67FD7B3C04807976D280F1BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_MSVC.h; path = ../../Source/model/jucer_ProjectExport_MSVC.h; sourceTree = SOURCE_ROOT; };
FFF343958E0C9BC1E14003CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_XCode.h; path = ../../Source/model/jucer_ProjectExport_XCode.h; sourceTree = SOURCE_ROOT; };
F1C676E178DEA8B86849CD64 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectSaver.h; path = ../../Source/model/jucer_ProjectSaver.h; sourceTree = SOURCE_ROOT; };
0AD266A3E698D40DCD88A432 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectWizard.cpp; path = ../../Source/model/jucer_ProjectWizard.cpp; sourceTree = SOURCE_ROOT; };
91C67387B525014760F514C2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectWizard.h; path = ../../Source/model/jucer_ProjectWizard.h; sourceTree = SOURCE_ROOT; };
DBE9A3BB502125C5D3433AE7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ResourceFile.cpp; path = ../../Source/model/jucer_ResourceFile.cpp; sourceTree = SOURCE_ROOT; };
2DEE6D9FE17874DAB301648C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ResourceFile.h; path = ../../Source/model/jucer_ResourceFile.h; sourceTree = SOURCE_ROOT; };
BAA4B3ECAA1344B0B4052542 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentDragOperation.h; path = "../../Source/ui/Component Editor/jucer_ComponentDragOperation.h"; sourceTree = SOURCE_ROOT; };
1BCF8B6367CCC73AEEF03818 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_CodeGenerator.cpp; path = ../../Source/model/Component/jucer_CodeGenerator.cpp; sourceTree = SOURCE_ROOT; };
868978C505781890533E282C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CodeGenerator.h; path = ../../Source/model/Component/jucer_CodeGenerator.h; sourceTree = SOURCE_ROOT; };
829C5DA65FB46B99756428C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentDocument.cpp; path = ../../Source/model/Component/jucer_ComponentDocument.cpp; sourceTree = SOURCE_ROOT; };
82F1014486AD8B0C3152FF91 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentDocument.h; path = ../../Source/model/Component/jucer_ComponentDocument.h; sourceTree = SOURCE_ROOT; };
776686405B2531413AAA7281 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComboBox.h; path = ../../Source/model/Component/Types/jucer_ComboBox.h; sourceTree = SOURCE_ROOT; };
D08D9DB99315F76093CF6EE6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentTypeManager.cpp; path = ../../Source/model/Component/Types/jucer_ComponentTypeManager.cpp; sourceTree = SOURCE_ROOT; };
03C51600B53B70BD0514254D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypeManager.h; path = ../../Source/model/Component/Types/jucer_ComponentTypeManager.h; sourceTree = SOURCE_ROOT; };
A8A4F96A0009D7FB79B210FC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTypes.h; path = ../../Source/model/Component/Types/jucer_ComponentTypes.h; sourceTree = SOURCE_ROOT; };
F05C6A0FF88238E712A23568 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GenericComponent.h; path = ../../Source/model/Component/Types/jucer_GenericComponent.h; sourceTree = SOURCE_ROOT; };
A424C2E4ADB30C62EB33215C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupComponent.h; path = ../../Source/model/Component/Types/jucer_GroupComponent.h; sourceTree = SOURCE_ROOT; };
4C0233A3D179C9D367132655 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerComponent.h; path = ../../Source/model/Component/Types/jucer_JucerComponent.h; sourceTree = SOURCE_ROOT; };
CC648C0D7428D809C1EF603E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Label.h; path = ../../Source/model/Component/Types/jucer_Label.h; sourceTree = SOURCE_ROOT; };
4CCA45827EB24DAC35225C8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Slider.h; path = ../../Source/model/Component/Types/jucer_Slider.h; sourceTree = SOURCE_ROOT; };
6891A060A1898C4EEE87C5F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TabbedComponent.h; path = ../../Source/model/Component/Types/jucer_TabbedComponent.h; sourceTree = SOURCE_ROOT; };
65BECAE9AB24EEDFBC637BF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextButton.h; path = ../../Source/model/Component/Types/jucer_TextButton.h; sourceTree = SOURCE_ROOT; };
9FE1B72EAF687BC6D8447106 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextEditor.h; path = ../../Source/model/Component/Types/jucer_TextEditor.h; sourceTree = SOURCE_ROOT; };
A3909FC517682D61645E63EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ToggleButton.h; path = ../../Source/model/Component/Types/jucer_ToggleButton.h; sourceTree = SOURCE_ROOT; };
E894E1F6D582678EE1F02763 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Viewport.h; path = ../../Source/model/Component/Types/jucer_Viewport.h; sourceTree = SOURCE_ROOT; };
B1471E8698D193FBCF0DD13D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DrawableDocument.cpp; path = ../../Source/model/Drawable/jucer_DrawableDocument.cpp; sourceTree = SOURCE_ROOT; };
739F94CA6213B43D867AB0FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableDocument.h; path = ../../Source/model/Drawable/jucer_DrawableDocument.h; sourceTree = SOURCE_ROOT; };
9DCB32BBD7053ACCB598CE79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_NewFileWizard.cpp; path = ../../Source/model/Project/jucer_NewFileWizard.cpp; sourceTree = SOURCE_ROOT; };
201DF0B7B4AA3E03B1AA5144 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewFileWizard.h; path = ../../Source/model/Project/jucer_NewFileWizard.h; sourceTree = SOURCE_ROOT; };
4179D4C7BF616A4A3C3E11CA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Project.cpp; path = ../../Source/model/Project/jucer_Project.cpp; sourceTree = SOURCE_ROOT; };
20276583E130CE37FBCD801C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Project.h; path = ../../Source/model/Project/jucer_Project.h; sourceTree = SOURCE_ROOT; };
48A4236550741B9D05208C60 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectExporter.cpp; path = ../../Source/model/Project/jucer_ProjectExporter.cpp; sourceTree = SOURCE_ROOT; };
99506FC73B73E240406EAF70 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExporter.h; path = ../../Source/model/Project/jucer_ProjectExporter.h; sourceTree = SOURCE_ROOT; };
8BCF3DDF79257BC1EF7D67E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_Make.h; path = ../../Source/model/Project/jucer_ProjectExport_Make.h; sourceTree = SOURCE_ROOT; };
0DA9F6324F5D4035640B61DE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_MSVC.h; path = ../../Source/model/Project/jucer_ProjectExport_MSVC.h; sourceTree = SOURCE_ROOT; };
F56963DECA44F72A4D61BCFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_XCode.h; path = ../../Source/model/Project/jucer_ProjectExport_XCode.h; sourceTree = SOURCE_ROOT; };
3C06302814D766140D92BAB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectSaver.h; path = ../../Source/model/Project/jucer_ProjectSaver.h; sourceTree = SOURCE_ROOT; };
9034F31FCBD5A2A297427537 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectWizard.cpp; path = ../../Source/model/Project/jucer_ProjectWizard.cpp; sourceTree = SOURCE_ROOT; };
96F6C11FDA985E9D550CE60C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectWizard.h; path = ../../Source/model/Project/jucer_ProjectWizard.h; sourceTree = SOURCE_ROOT; };
A6D148E4503AAD3DE6DDCD8B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ResourceFile.cpp; path = ../../Source/model/Project/jucer_ResourceFile.cpp; sourceTree = SOURCE_ROOT; };
5923DFBB741171B1D6EA62F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ResourceFile.h; path = ../../Source/model/Project/jucer_ResourceFile.h; sourceTree = SOURCE_ROOT; };
31F175F277299B3CEA857F96 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_SourceCodeEditor.cpp; path = "../../Source/ui/Code Editor/jucer_SourceCodeEditor.cpp"; sourceTree = SOURCE_ROOT; };
B85B1F0F8634A2D7DC1F8809 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SourceCodeEditor.h; path = "../../Source/ui/Code Editor/jucer_SourceCodeEditor.h"; sourceTree = SOURCE_ROOT; };
3263F4099F45D6FACD28F08D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentEditor.cpp; path = "../../Source/ui/Component Editor/jucer_ComponentEditor.cpp"; sourceTree = SOURCE_ROOT; };
16328135EAE8536A5E2AB454 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditor.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditor.h"; sourceTree = SOURCE_ROOT; };
81D9A078702EFE0A32C037A1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentEditorCanvas.cpp; path = "../../Source/ui/Component Editor/jucer_ComponentEditorCanvas.cpp"; sourceTree = SOURCE_ROOT; };
3B77C7A8D9A2386088D75CFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorCanvas.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorCanvas.h"; sourceTree = SOURCE_ROOT; };
7CB154C3682F8C786134A6F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorCodeView.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorCodeView.h"; sourceTree = SOURCE_ROOT; };
B5F5AD9FC53F60610C71367C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorToolbar.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorToolbar.h"; sourceTree = SOURCE_ROOT; };
8CB73D6F1D0FFC4B379D1240 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentEditorTreeView.h; path = "../../Source/ui/Component Editor/jucer_ComponentEditorTreeView.h"; sourceTree = SOURCE_ROOT; };
82F91CF84A296665177CB79A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DrawableEditor.cpp; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditor.cpp"; sourceTree = SOURCE_ROOT; };
D1776C5F3E6BB7E8C698BAD6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditor.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditor.h"; sourceTree = SOURCE_ROOT; };
F9EAFD5BC3E676BC59B326E0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableObjectComponent.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h"; sourceTree = SOURCE_ROOT; };
654C1B62A2BE1FBB28BEAE72 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableTreeviewItem.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableTreeviewItem.h"; sourceTree = SOURCE_ROOT; };
B19F19A0ED7386FAA7DD854E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditorCanvas.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditorCanvas.h"; sourceTree = SOURCE_ROOT; };
F93FC34AEC400642196A0238 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditorToolbar.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditorToolbar.h"; sourceTree = SOURCE_ROOT; };
F195C9668F12CC21CD2708AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DrawableEditorTreeView.h; path = "../../Source/ui/Drawable Editor/jucer_DrawableEditorTreeView.h"; sourceTree = SOURCE_ROOT; };
03E9C079FBBF727D50A2B678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_EditorCanvas.cpp; path = "../../Source/ui/Editor Base/jucer_EditorCanvas.cpp"; sourceTree = SOURCE_ROOT; };
E84D46270BBB219BED0446F7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditorCanvas.h; path = "../../Source/ui/Editor Base/jucer_EditorCanvas.h"; sourceTree = SOURCE_ROOT; };
BF1C973255F7BFD3965016AE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditorDragOperation.h; path = "../../Source/ui/Editor Base/jucer_EditorDragOperation.h"; sourceTree = SOURCE_ROOT; };
064C5F11CA954DAEFA7ACD3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditorPanel.h; path = "../../Source/ui/Editor Base/jucer_EditorPanel.h"; sourceTree = SOURCE_ROOT; };
E6BB0D9B515B50E418D98B9C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CommandIDs.h; path = ../../Source/ui/jucer_CommandIDs.h; sourceTree = SOURCE_ROOT; };
95A4E72FC64A7338CB259DF7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CoordinatePropertyComponent.h; path = ../../Source/ui/jucer_CoordinatePropertyComponent.h; sourceTree = SOURCE_ROOT; };
3B2C45064E85B3B631D4F921 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_DocumentEditorComponent.cpp; path = ../../Source/ui/jucer_DocumentEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
156F72179BBFCD0D9804C266 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_DocumentEditorComponent.h; path = ../../Source/ui/jucer_DocumentEditorComponent.h; sourceTree = SOURCE_ROOT; };
8F731296532276CBF2B6190D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_GroupInformationComponent.cpp; path = ../../Source/ui/jucer_GroupInformationComponent.cpp; sourceTree = SOURCE_ROOT; };
C1DB44D4E31AF6FAD8746EA6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupInformationComponent.h; path = ../../Source/ui/jucer_GroupInformationComponent.h; sourceTree = SOURCE_ROOT; };
1E7EDE73A92751752BC90A62 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ItemPreviewComponent.cpp; path = ../../Source/ui/jucer_ItemPreviewComponent.cpp; sourceTree = SOURCE_ROOT; };
637290E424EEED413A6A6D83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ItemPreviewComponent.h; path = ../../Source/ui/jucer_ItemPreviewComponent.h; sourceTree = SOURCE_ROOT; };
3C60CAE9481EE0113C15A0B9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_JucerTreeViewBase.cpp; path = ../../Source/ui/jucer_JucerTreeViewBase.cpp; sourceTree = SOURCE_ROOT; };
BF0218D8FC9831826CD2F670 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_JucerTreeViewBase.h; path = ../../Source/ui/jucer_JucerTreeViewBase.h; sourceTree = SOURCE_ROOT; };
17F5B1F00F15DB37EA4A4AEA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainWindow.cpp; path = ../../Source/ui/jucer_MainWindow.cpp; sourceTree = SOURCE_ROOT; };
65C0C87A85D4371BDE1C4347 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MainWindow.h; path = ../../Source/ui/jucer_MainWindow.h; sourceTree = SOURCE_ROOT; };
118A505BA7079B3C8C9B858B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_OpenDocumentManager.cpp; path = ../../Source/ui/jucer_OpenDocumentManager.cpp; sourceTree = SOURCE_ROOT; };
5377D74DB551C2B83F73FAE0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_OpenDocumentManager.h; path = ../../Source/ui/jucer_OpenDocumentManager.h; sourceTree = SOURCE_ROOT; };
487D3D6777F8C3E26C0D5887 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectContentComponent.cpp; path = ../../Source/ui/jucer_ProjectContentComponent.cpp; sourceTree = SOURCE_ROOT; };
442910162B36728054AACDFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = ../../Source/ui/jucer_ProjectContentComponent.h; sourceTree = SOURCE_ROOT; };
9170F22B59096F151A9FFFB3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectInformationComponent.cpp; path = ../../Source/ui/jucer_ProjectInformationComponent.cpp; sourceTree = SOURCE_ROOT; };
097BD8BB61EE09C908A8C99D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectInformationComponent.h; path = ../../Source/ui/jucer_ProjectInformationComponent.h; sourceTree = SOURCE_ROOT; };
AEE4E1F518A91ABB386CFD9E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectTreeViewBase.cpp; path = ../../Source/ui/jucer_ProjectTreeViewBase.cpp; sourceTree = SOURCE_ROOT; };
F400D65DAD8A93736A7960CC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectTreeViewBase.h; path = ../../Source/ui/jucer_ProjectTreeViewBase.h; sourceTree = SOURCE_ROOT; };
E55B34E6694D69E3DBB107D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_SourceCodeEditor.cpp; path = ../../Source/ui/jucer_SourceCodeEditor.cpp; sourceTree = SOURCE_ROOT; };
8A3A8D57685177B2F0D52C17 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SourceCodeEditor.h; path = ../../Source/ui/jucer_SourceCodeEditor.h; sourceTree = SOURCE_ROOT; };
B4439D672F2977238755E1E2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_TreeViewTypes.cpp; path = ../../Source/ui/jucer_TreeViewTypes.cpp; sourceTree = SOURCE_ROOT; };
4BF0300CA427D2D308542534 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TreeViewTypes.h; path = ../../Source/ui/jucer_TreeViewTypes.h; sourceTree = SOURCE_ROOT; };
63C3715BB513E5F84B1159AB = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_GroupInformationComponent.cpp; path = "../../Source/ui/Project Editor/jucer_GroupInformationComponent.cpp"; sourceTree = SOURCE_ROOT; };
9605019A62439E2D81587677 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_GroupInformationComponent.h; path = "../../Source/ui/Project Editor/jucer_GroupInformationComponent.h"; sourceTree = SOURCE_ROOT; };
3E8A127EE612399B57B82B4C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ItemPreviewComponent.cpp; path = "../../Source/ui/Project Editor/jucer_ItemPreviewComponent.cpp"; sourceTree = SOURCE_ROOT; };
DEF2E2C35BD8A4EBC1127F69 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ItemPreviewComponent.h; path = "../../Source/ui/Project Editor/jucer_ItemPreviewComponent.h"; sourceTree = SOURCE_ROOT; };
742E74D389224CCB863822AD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectContentComponent.cpp; path = "../../Source/ui/Project Editor/jucer_ProjectContentComponent.cpp"; sourceTree = SOURCE_ROOT; };
232AEDC27972ED69C3373080 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = "../../Source/ui/Project Editor/jucer_ProjectContentComponent.h"; sourceTree = SOURCE_ROOT; };
E4BED7589BF4391ECB067DBC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectInformationComponent.cpp; path = "../../Source/ui/Project Editor/jucer_ProjectInformationComponent.cpp"; sourceTree = SOURCE_ROOT; };
14B2027257EE36ABD0D0CEDB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectInformationComponent.h; path = "../../Source/ui/Project Editor/jucer_ProjectInformationComponent.h"; sourceTree = SOURCE_ROOT; };
1FDE55685608689765ADC578 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ProjectTreeViewBase.cpp; path = "../../Source/ui/Project Editor/jucer_ProjectTreeViewBase.cpp"; sourceTree = SOURCE_ROOT; };
07234413CA03F3C304B63188 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectTreeViewBase.h; path = "../../Source/ui/Project Editor/jucer_ProjectTreeViewBase.h"; sourceTree = SOURCE_ROOT; };
939E2A7946081DB4D21B89B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_TreeViewTypes.cpp; path = "../../Source/ui/Project Editor/jucer_TreeViewTypes.cpp"; sourceTree = SOURCE_ROOT; };
119004FCF601190AC8929BBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TreeViewTypes.h; path = "../../Source/ui/Project Editor/jucer_TreeViewTypes.h"; sourceTree = SOURCE_ROOT; };
AAF3C58696944A256CA61730 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ColourEditorComponent.h; path = ../../Source/utility/jucer_ColourEditorComponent.h; sourceTree = SOURCE_ROOT; };
9736236B5C4D6A16FC7E03AC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Colours.h; path = ../../Source/utility/jucer_Colours.h; sourceTree = SOURCE_ROOT; };
C7ADB43F83A83FFC08921A12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Coordinate.cpp; path = ../../Source/utility/jucer_Coordinate.cpp; sourceTree = SOURCE_ROOT; };
EFA0636FB8ABA3377AB6C6F4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_Coordinate.h; path = ../../Source/utility/jucer_Coordinate.h; sourceTree = SOURCE_ROOT; };
CC9A3046B8B9FCDFE2092F51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_CoordinatePropertyComponent.h; path = ../../Source/utility/jucer_CoordinatePropertyComponent.h; sourceTree = SOURCE_ROOT; };
848F9EFCBB691000A4B32346 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_MarkerListBase.h; path = ../../Source/utility/jucer_MarkerListBase.h; sourceTree = SOURCE_ROOT; };
F99858EE1CD3B23057B8BEBD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_RelativePath.h; path = ../../Source/utility/jucer_RelativePath.h; sourceTree = SOURCE_ROOT; };
7A1CD936BD306A6E0BEFB046 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_StoredSettings.cpp; path = ../../Source/utility/jucer_StoredSettings.cpp; sourceTree = SOURCE_ROOT; };
E99413C9561A66310DAD5EEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_StoredSettings.h; path = ../../Source/utility/jucer_StoredSettings.h; sourceTree = SOURCE_ROOT; };
@@ -166,50 +170,55 @@
DD6476FF0F8BE833CD54C01F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode2.mm; path = ../../JuceLibraryCode/JuceLibraryCode2.mm; sourceTree = SOURCE_ROOT; };
268B4FFB1C675B679138545F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode3.mm; path = ../../JuceLibraryCode/JuceLibraryCode3.mm; sourceTree = SOURCE_ROOT; };
60A217F62952DE8A752BD79F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = JuceLibraryCode4.mm; path = ../../JuceLibraryCode/JuceLibraryCode4.mm; sourceTree = SOURCE_ROOT; };
D3D6EC2C17524688F2E803EB = { isa = PBXGroup; children = (
82A1EC47692975C7031B3973,
4F23FF649E7BA3A0F737E3BE,
6FD54B7E8992FD692BAA0DC6,
926FC04F4EAF24C7C4671207,
C6263909812DBE995167932B,
6B5504F7274B11DFAD3B2E26,
133385B65A02DF50291B222F,
C64A89EA5C3F0A701F9EBA79,
40716207B98461E05DC46F14,
4A22DE9DF590115F174CA70E,
E18C99BDD4EF3DFD767F3770,
1BBF86F1D833DAD4A1503C82,
A6FAA90B494DCD7CA5911196,
03AD2BF6C80C6AF47BBDB7E9 ); name = "Component Types"; sourceTree = "<group>"; };
7C95A5CDB1B24D227D92749E = { isa = PBXGroup; children = (
776686405B2531413AAA7281,
D08D9DB99315F76093CF6EE6,
03C51600B53B70BD0514254D,
A8A4F96A0009D7FB79B210FC,
F05C6A0FF88238E712A23568,
A424C2E4ADB30C62EB33215C,
4C0233A3D179C9D367132655,
CC648C0D7428D809C1EF603E,
4CCA45827EB24DAC35225C8B,
6891A060A1898C4EEE87C5F9,
65BECAE9AB24EEDFBC637BF4,
9FE1B72EAF687BC6D8447106,
A3909FC517682D61645E63EF,
E894E1F6D582678EE1F02763 ); name = Types; sourceTree = "<group>"; };
E874A7599C1FEEE538F2DFF2 = { isa = PBXGroup; children = (
1BCF8B6367CCC73AEEF03818,
868978C505781890533E282C,
829C5DA65FB46B99756428C5,
82F1014486AD8B0C3152FF91,
7C95A5CDB1B24D227D92749E ); name = Component; sourceTree = "<group>"; };
E70E3BE796E91EA86CFE10FE = { isa = PBXGroup; children = (
B1471E8698D193FBCF0DD13D,
739F94CA6213B43D867AB0FD ); name = Drawable; sourceTree = "<group>"; };
ADA17383E5554BCDF567AACC = { isa = PBXGroup; children = (
9DCB32BBD7053ACCB598CE79,
201DF0B7B4AA3E03B1AA5144,
4179D4C7BF616A4A3C3E11CA,
20276583E130CE37FBCD801C,
48A4236550741B9D05208C60,
99506FC73B73E240406EAF70,
8BCF3DDF79257BC1EF7D67E0,
0DA9F6324F5D4035640B61DE,
F56963DECA44F72A4D61BCFE,
3C06302814D766140D92BAB8,
9034F31FCBD5A2A297427537,
96F6C11FDA985E9D550CE60C,
A6D148E4503AAD3DE6DDCD8B,
5923DFBB741171B1D6EA62F4 ); name = Project; sourceTree = "<group>"; };
BF6238C9155879B9A9C47213 = { isa = PBXGroup; children = (
D3D6EC2C17524688F2E803EB,
2D6D6985B452EA0B67A18914,
E6CC3A04349F6B227FDAB26F,
42CEC4195577AE91AA6CBA7F,
FE3EB6472027A398A978CBE4,
45C80436FD5A8438D0E6BE17,
420E4189E7DE25E9D0D8E5B8,
FF625CB50FB5C3536BA40604,
A490098DA6400B3881F336D0,
DA142548FCADFAC50648ED3C,
765A993B1D7A4750FE92FE21,
D47A40CB3CF6AAE14B3C7796,
FD44D5AD3D019B52485F4EB1,
FE9A53032395E717F54AE85B,
C3C2FC6810F53559CAD7B08C,
21B09F5FD350D587F99A48E3,
67FD7B3C04807976D280F1BA,
FFF343958E0C9BC1E14003CE,
F1C676E178DEA8B86849CD64,
0AD266A3E698D40DCD88A432,
91C67387B525014760F514C2,
DBE9A3BB502125C5D3433AE7,
2DEE6D9FE17874DAB301648C ); name = Model; sourceTree = "<group>"; };
E874A7599C1FEEE538F2DFF2,
E70E3BE796E91EA86CFE10FE,
ADA17383E5554BCDF567AACC ); name = Model; sourceTree = "<group>"; };
336D07CB9ED81D2A985A8543 = { isa = PBXGroup; children = (
31F175F277299B3CEA857F96,
B85B1F0F8634A2D7DC1F8809 ); name = "Code Editor"; sourceTree = "<group>"; };
3A0BE83502CB509D623C2C07 = { isa = PBXGroup; children = (
BAA4B3ECAA1344B0B4052542,
3263F4099F45D6FACD28F08D,
16328135EAE8536A5E2AB454,
81D9A078702EFE0A32C037A1,
3B77C7A8D9A2386088D75CFE,
7CB154C3682F8C786134A6F3,
B5F5AD9FC53F60610C71367C,
@@ -217,38 +226,49 @@
E6053BD673F80E900DDA3593 = { isa = PBXGroup; children = (
82F91CF84A296665177CB79A,
D1776C5F3E6BB7E8C698BAD6,
F9EAFD5BC3E676BC59B326E0,
654C1B62A2BE1FBB28BEAE72 ); name = "Drawable Editor"; sourceTree = "<group>"; };
B19F19A0ED7386FAA7DD854E,
F93FC34AEC400642196A0238,
F195C9668F12CC21CD2708AA ); name = "Drawable Editor"; sourceTree = "<group>"; };
F4B31EE979DF2BE5AA276EAF = { isa = PBXGroup; children = (
03E9C079FBBF727D50A2B678,
E84D46270BBB219BED0446F7,
BF1C973255F7BFD3965016AE,
064C5F11CA954DAEFA7ACD3A ); name = "Editor Base"; sourceTree = "<group>"; };
73551B9BCDF3BAC06FECEAF8 = { isa = PBXGroup; children = (
63C3715BB513E5F84B1159AB,
9605019A62439E2D81587677,
3E8A127EE612399B57B82B4C,
DEF2E2C35BD8A4EBC1127F69,
742E74D389224CCB863822AD,
232AEDC27972ED69C3373080,
E4BED7589BF4391ECB067DBC,
14B2027257EE36ABD0D0CEDB,
1FDE55685608689765ADC578,
07234413CA03F3C304B63188,
939E2A7946081DB4D21B89B6,
119004FCF601190AC8929BBD ); name = "Project Editor"; sourceTree = "<group>"; };
63A4428C116D97D7C5C05DC8 = { isa = PBXGroup; children = (
336D07CB9ED81D2A985A8543,
3A0BE83502CB509D623C2C07,
E6053BD673F80E900DDA3593,
F4B31EE979DF2BE5AA276EAF,
E6BB0D9B515B50E418D98B9C,
95A4E72FC64A7338CB259DF7,
3B2C45064E85B3B631D4F921,
156F72179BBFCD0D9804C266,
8F731296532276CBF2B6190D,
C1DB44D4E31AF6FAD8746EA6,
1E7EDE73A92751752BC90A62,
637290E424EEED413A6A6D83,
3C60CAE9481EE0113C15A0B9,
BF0218D8FC9831826CD2F670,
17F5B1F00F15DB37EA4A4AEA,
65C0C87A85D4371BDE1C4347,
118A505BA7079B3C8C9B858B,
5377D74DB551C2B83F73FAE0,
487D3D6777F8C3E26C0D5887,
442910162B36728054AACDFC,
9170F22B59096F151A9FFFB3,
097BD8BB61EE09C908A8C99D,
AEE4E1F518A91ABB386CFD9E,
F400D65DAD8A93736A7960CC,
E55B34E6694D69E3DBB107D1,
8A3A8D57685177B2F0D52C17,
B4439D672F2977238755E1E2,
4BF0300CA427D2D308542534 ); name = UI; sourceTree = "<group>"; };
73551B9BCDF3BAC06FECEAF8 ); name = UI; sourceTree = "<group>"; };
14B5B6D3D07644058F0F526F = { isa = PBXGroup; children = (
AAF3C58696944A256CA61730,
9736236B5C4D6A16FC7E03AC,
C7ADB43F83A83FFC08921A12,
EFA0636FB8ABA3377AB6C6F4,
CC9A3046B8B9FCDFE2092F51,
848F9EFCBB691000A4B32346,
F99858EE1CD3B23057B8BEBD,
7A1CD936BD306A6E0BEFB046,
E99413C9561A66310DAD5EEB,
@@ -372,30 +392,30 @@
673FACB8969ADED17ACEFF7C ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; };
87CCE4CB1FAB40B6F21DEACE = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; };
5362E03ADF975A126C1F2F7B = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = (
52D75B8B0F52DD4F37A4B1C0,
CD4226951C3F7FE19CF8A7CE,
8E859D542404B684D5E1545F,
1DF9688E29753A0459E6C32A,
1174D3512AF8207950094C56,
087CCE9E7146F1EC4F241254,
E9935BFB0EFA8CCCD41DC08E,
60CDC1358E84801B6526E434,
EEC6FC8E546C88C825411DB2,
B2B821DE12F1679A3ADA597A,
A7EB756F566FB773ABE3DFA9,
061C981D0E9FB70DE5A3D32C,
FEDBCD721085272D356BBAEB,
268807D7091702D29033CC27,
06838545183964D8C1E60530,
048D33BDE7413EFE05D09901,
9DA1913A62297D7111E0A6C9,
44C2E5705EEA4F01309D8960,
7C9FFFC0B129F5C3FAEE13E9,
33E1A095D656AF109DD54170,
D706C3B5016318D85FE452C2,
CDB5102BEFD7C18BD28709F3,
E43D00B370F289420379B759,
EFFCA85EFB4F06F1BEB9AB97,
944CE0EADAD951F48EC77071,
4E8860E0F8680956A6F5B493,
288F5E7A2EC305BB4D8D73D1,
2417927E323BFE201D5985B9,
A1CB18029E09A66E192D9A29,
F8C762CCE16669F76D2209B9,
4FF75A3C7DCB9FD245320FE6,
A70AED2E35B809981470A547,
4D6C7380B8BB0BA9470C146C,
438FED16CFDB36A4BE1F5F35,
33A4BAAD7A79BA63E78CB503,
496F7F18FCBE1E212F62E328,
BFFA4F695DDFEA8EE6CE7241,
C74E7F0701EF10141D5C1D9D,
54CF219EADAD8E6DC7D20A8E,
984444E3B2947675DC7D65DA,
58BF60E87F9A8EDCACC5D1AE,
5BF87265418D736250283182,
DDAB225ABE572196882C3524,
FA8C72364CDFD2B76F16C0F1,
6B6B0EBBE899B0ACDCAD92F5,


+ 72
- 56
extras/Jucer (experimental)/Builds/VisualStudio2005/The Jucer.vcproj View File

@@ -133,51 +133,57 @@
<Files>
<Filter Name="The Jucer">
<Filter Name="Model">
<Filter Name="Component Types">
<File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.cpp"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypes.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ComboBox.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_GenericComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_GroupComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_JucerComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_Label.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_Slider.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_TabbedComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_TextButton.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_TextEditor.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ToggleButton.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_Viewport.h"/>
<Filter Name="Component">
<File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.cpp"/>
<File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.h"/>
<File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.cpp"/>
<File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.h"/>
<Filter Name="Types">
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComboBox.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.cpp"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypes.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_GenericComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_GroupComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_JucerComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_Label.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_Slider.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_TabbedComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_TextButton.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_TextEditor.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ToggleButton.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_Viewport.h"/>
</Filter>
</Filter>
<Filter Name="Drawable">
<File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.cpp"/>
<File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.h"/>
</Filter>
<Filter Name="Project">
<File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_Project.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_Project.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_Make.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_MSVC.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_XCode.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectSaver.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.h"/>
</Filter>
<File RelativePath="..\..\Source\model\jucer_ComponentDocument.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ComponentDocument.h"/>
<File RelativePath="..\..\Source\model\jucer_CodeGenerator.cpp"/>
<File RelativePath="..\..\Source\model\jucer_CodeGenerator.h"/>
<File RelativePath="..\..\Source\model\jucer_Coordinate.cpp"/>
<File RelativePath="..\..\Source\model\jucer_Coordinate.h"/>
<File RelativePath="..\..\Source\model\jucer_DrawableDocument.cpp"/>
<File RelativePath="..\..\Source\model\jucer_DrawableDocument.h"/>
<File RelativePath="..\..\Source\model\jucer_NewFileWizard.cpp"/>
<File RelativePath="..\..\Source\model\jucer_NewFileWizard.h"/>
<File RelativePath="..\..\Source\model\jucer_Project.cpp"/>
<File RelativePath="..\..\Source\model\jucer_Project.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExporter.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExporter.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExport_Make.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExport_MSVC.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExport_XCode.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectSaver.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectWizard.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ProjectWizard.h"/>
<File RelativePath="..\..\Source\model\jucer_ResourceFile.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ResourceFile.h"/>
</Filter>
<Filter Name="UI">
<Filter Name="Code Editor">
<File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.cpp"/>
<File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.h"/>
</Filter>
<Filter Name="Component Editor">
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentDragOperation.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.cpp"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.cpp"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/>
@@ -186,37 +192,47 @@
<Filter Name="Drawable Editor">
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.cpp"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableObjectComponent.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableTreeviewItem.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorCanvas.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorToolbar.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorTreeView.h"/>
</Filter>
<Filter Name="Editor Base">
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.cpp"/>
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.h"/>
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorDragOperation.h"/>
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorPanel.h"/>
</Filter>
<File RelativePath="..\..\Source\ui\jucer_CommandIDs.h"/>
<File RelativePath="..\..\Source\ui\jucer_CoordinatePropertyComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/>
<File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/>
<File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.h"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.h"/>
<File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.h"/>
<File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.h"/>
<Filter Name="Project Editor">
<File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.h"/>
</Filter>
</Filter>
<Filter Name="Utility">
<File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/>
<File RelativePath="..\..\Source\utility\jucer_Colours.h"/>
<File RelativePath="..\..\Source\utility\jucer_Coordinate.cpp"/>
<File RelativePath="..\..\Source\utility\jucer_Coordinate.h"/>
<File RelativePath="..\..\Source\utility\jucer_CoordinatePropertyComponent.h"/>
<File RelativePath="..\..\Source\utility\jucer_MarkerListBase.h"/>
<File RelativePath="..\..\Source\utility\jucer_RelativePath.h"/>
<File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/>
<File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/>


+ 72
- 56
extras/Jucer (experimental)/Builds/VisualStudio2008/The Jucer.vcproj View File

@@ -133,51 +133,57 @@
<Files>
<Filter Name="The Jucer">
<Filter Name="Model">
<Filter Name="Component Types">
<File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.cpp"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypeManager.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ComponentTypes.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ComboBox.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_GenericComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_GroupComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_JucerComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_Label.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_Slider.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_TabbedComponent.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_TextButton.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_TextEditor.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_ToggleButton.h"/>
<File RelativePath="..\..\Source\model\Component Types\jucer_Viewport.h"/>
<Filter Name="Component">
<File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.cpp"/>
<File RelativePath="..\..\Source\model\Component\jucer_CodeGenerator.h"/>
<File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.cpp"/>
<File RelativePath="..\..\Source\model\Component\jucer_ComponentDocument.h"/>
<Filter Name="Types">
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComboBox.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.cpp"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypeManager.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ComponentTypes.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_GenericComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_GroupComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_JucerComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_Label.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_Slider.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_TabbedComponent.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_TextButton.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_TextEditor.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_ToggleButton.h"/>
<File RelativePath="..\..\Source\model\Component\Types\jucer_Viewport.h"/>
</Filter>
</Filter>
<Filter Name="Drawable">
<File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.cpp"/>
<File RelativePath="..\..\Source\model\Drawable\jucer_DrawableDocument.h"/>
</Filter>
<Filter Name="Project">
<File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_NewFileWizard.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_Project.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_Project.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExporter.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_Make.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_MSVC.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectExport_XCode.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectSaver.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_ProjectWizard.h"/>
<File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.cpp"/>
<File RelativePath="..\..\Source\model\Project\jucer_ResourceFile.h"/>
</Filter>
<File RelativePath="..\..\Source\model\jucer_ComponentDocument.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ComponentDocument.h"/>
<File RelativePath="..\..\Source\model\jucer_CodeGenerator.cpp"/>
<File RelativePath="..\..\Source\model\jucer_CodeGenerator.h"/>
<File RelativePath="..\..\Source\model\jucer_Coordinate.cpp"/>
<File RelativePath="..\..\Source\model\jucer_Coordinate.h"/>
<File RelativePath="..\..\Source\model\jucer_DrawableDocument.cpp"/>
<File RelativePath="..\..\Source\model\jucer_DrawableDocument.h"/>
<File RelativePath="..\..\Source\model\jucer_NewFileWizard.cpp"/>
<File RelativePath="..\..\Source\model\jucer_NewFileWizard.h"/>
<File RelativePath="..\..\Source\model\jucer_Project.cpp"/>
<File RelativePath="..\..\Source\model\jucer_Project.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExporter.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExporter.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExport_Make.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExport_MSVC.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectExport_XCode.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectSaver.h"/>
<File RelativePath="..\..\Source\model\jucer_ProjectWizard.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ProjectWizard.h"/>
<File RelativePath="..\..\Source\model\jucer_ResourceFile.cpp"/>
<File RelativePath="..\..\Source\model\jucer_ResourceFile.h"/>
</Filter>
<Filter Name="UI">
<Filter Name="Code Editor">
<File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.cpp"/>
<File RelativePath="..\..\Source\ui\Code Editor\jucer_SourceCodeEditor.h"/>
</Filter>
<Filter Name="Component Editor">
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentDragOperation.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.cpp"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditor.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.cpp"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCanvas.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorCodeView.h"/>
<File RelativePath="..\..\Source\ui\Component Editor\jucer_ComponentEditorToolbar.h"/>
@@ -186,37 +192,47 @@
<Filter Name="Drawable Editor">
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.cpp"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditor.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableObjectComponent.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableTreeviewItem.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorCanvas.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorToolbar.h"/>
<File RelativePath="..\..\Source\ui\Drawable Editor\jucer_DrawableEditorTreeView.h"/>
</Filter>
<Filter Name="Editor Base">
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.cpp"/>
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorCanvas.h"/>
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorDragOperation.h"/>
<File RelativePath="..\..\Source\ui\Editor Base\jucer_EditorPanel.h"/>
</Filter>
<File RelativePath="..\..\Source\ui\jucer_CommandIDs.h"/>
<File RelativePath="..\..\Source\ui\jucer_CoordinatePropertyComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_DocumentEditorComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_GroupInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ItemPreviewComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_JucerTreeViewBase.h"/>
<File RelativePath="..\..\Source\ui\jucer_MainWindow.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_MainWindow.h"/>
<File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_OpenDocumentManager.h"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectContentComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_ProjectTreeViewBase.h"/>
<File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_SourceCodeEditor.h"/>
<File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.cpp"/>
<File RelativePath="..\..\Source\ui\jucer_TreeViewTypes.h"/>
<Filter Name="Project Editor">
<File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_GroupInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ItemPreviewComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectContentComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectInformationComponent.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_ProjectTreeViewBase.h"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.cpp"/>
<File RelativePath="..\..\Source\ui\Project Editor\jucer_TreeViewTypes.h"/>
</Filter>
</Filter>
<Filter Name="Utility">
<File RelativePath="..\..\Source\utility\jucer_ColourEditorComponent.h"/>
<File RelativePath="..\..\Source\utility\jucer_Colours.h"/>
<File RelativePath="..\..\Source\utility\jucer_Coordinate.cpp"/>
<File RelativePath="..\..\Source\utility\jucer_Coordinate.h"/>
<File RelativePath="..\..\Source\utility\jucer_CoordinatePropertyComponent.h"/>
<File RelativePath="..\..\Source\utility\jucer_MarkerListBase.h"/>
<File RelativePath="..\..\Source\utility\jucer_RelativePath.h"/>
<File RelativePath="..\..\Source\utility\jucer_StoredSettings.cpp"/>
<File RelativePath="..\..\Source\utility\jucer_StoredSettings.h"/>


+ 131
- 111
extras/Jucer (experimental)/Jucer.jucer View File

@@ -27,91 +27,95 @@
</CONFIGURATIONS>
<MAINGROUP name="The Jucer" id="NhrJq66R">
<GROUP id="EmpOiUg6" name="Model">
<GROUP id="7IAOlGP0H" name="Component Types">
<FILE id="dhwVkC0LQ" name="jucer_ComponentTypeManager.cpp" compile="1"
resource="0" file="Source/model/Component Types/jucer_ComponentTypeManager.cpp"/>
<FILE id="rSuW9uAYG" name="jucer_ComponentTypeManager.h" compile="0"
resource="0" file="Source/model/Component Types/jucer_ComponentTypeManager.h"/>
<FILE id="X1JJNqL9d" name="jucer_ComponentTypes.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_ComponentTypes.h"/>
<FILE id="0kW52xWY0" name="jucer_ComboBox.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_ComboBox.h"/>
<FILE id="IgbLRcOlP" name="jucer_GenericComponent.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_GenericComponent.h"/>
<FILE id="dO5A44NtK" name="jucer_GroupComponent.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_GroupComponent.h"/>
<FILE id="5ooKsX1Oy" name="jucer_JucerComponent.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_JucerComponent.h"/>
<FILE id="J1dHwtOob" name="jucer_Label.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_Label.h"/>
<FILE id="K2f4ViI8f" name="jucer_Slider.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_Slider.h"/>
<FILE id="Yq56kjAjr" name="jucer_TabbedComponent.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_TabbedComponent.h"/>
<FILE id="lO2yuwiGR" name="jucer_TextButton.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_TextButton.h"/>
<FILE id="9kpY6Dy8E" name="jucer_TextEditor.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_TextEditor.h"/>
<FILE id="EOwXntvc" name="jucer_ToggleButton.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_ToggleButton.h"/>
<FILE id="dnB5Epzjx" name="jucer_Viewport.h" compile="0" resource="0"
file="Source/model/Component Types/jucer_Viewport.h"/>
<GROUP id="r9Z0VgmVt" name="Component">
<FILE id="cAfGal6GQ" name="jucer_CodeGenerator.cpp" compile="1" resource="0"
file="Source/model/Component/jucer_CodeGenerator.cpp"/>
<FILE id="Qibg2oEYn" name="jucer_CodeGenerator.h" compile="0" resource="0"
file="Source/model/Component/jucer_CodeGenerator.h"/>
<FILE id="9RinhqJ0h" name="jucer_ComponentDocument.cpp" compile="1"
resource="0" file="Source/model/Component/jucer_ComponentDocument.cpp"/>
<FILE id="1i1F8pBgt" name="jucer_ComponentDocument.h" compile="0" resource="0"
file="Source/model/Component/jucer_ComponentDocument.h"/>
<GROUP id="fX4b21TeV" name="Types">
<FILE id="Vy9PjpAR5" name="jucer_ComboBox.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_ComboBox.h"/>
<FILE id="ReDOix8hj" name="jucer_ComponentTypeManager.cpp" compile="1"
resource="0" file="Source/model/Component/Types/jucer_ComponentTypeManager.cpp"/>
<FILE id="u1zS2mcPU" name="jucer_ComponentTypeManager.h" compile="0"
resource="0" file="Source/model/Component/Types/jucer_ComponentTypeManager.h"/>
<FILE id="qqDkB89pF" name="jucer_ComponentTypes.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_ComponentTypes.h"/>
<FILE id="oiNs8GZo" name="jucer_GenericComponent.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_GenericComponent.h"/>
<FILE id="lmrNPax3E" name="jucer_GroupComponent.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_GroupComponent.h"/>
<FILE id="fUXMrXWsn" name="jucer_JucerComponent.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_JucerComponent.h"/>
<FILE id="FpznvfhuR" name="jucer_Label.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_Label.h"/>
<FILE id="UN9mKr0Ex" name="jucer_Slider.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_Slider.h"/>
<FILE id="QxRfjFUjL" name="jucer_TabbedComponent.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_TabbedComponent.h"/>
<FILE id="Cb8vXkAtU" name="jucer_TextButton.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_TextButton.h"/>
<FILE id="Rc1C9l1Lk" name="jucer_TextEditor.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_TextEditor.h"/>
<FILE id="BwDu2gfjb" name="jucer_ToggleButton.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_ToggleButton.h"/>
<FILE id="FEcXNQqY" name="jucer_Viewport.h" compile="0" resource="0"
file="Source/model/Component/Types/jucer_Viewport.h"/>
</GROUP>
</GROUP>
<GROUP id="HpUkRSarI" name="Drawable">
<FILE id="ncwNLhJd" name="jucer_DrawableDocument.cpp" compile="1" resource="0"
file="Source/model/Drawable/jucer_DrawableDocument.cpp"/>
<FILE id="qMcrWuCal" name="jucer_DrawableDocument.h" compile="0" resource="0"
file="Source/model/Drawable/jucer_DrawableDocument.h"/>
</GROUP>
<GROUP id="na25KSPIj" name="Project">
<FILE id="jqL1mb9xp" name="jucer_NewFileWizard.cpp" compile="1" resource="0"
file="Source/model/Project/jucer_NewFileWizard.cpp"/>
<FILE id="DTXE0P1Rs" name="jucer_NewFileWizard.h" compile="0" resource="0"
file="Source/model/Project/jucer_NewFileWizard.h"/>
<FILE id="7j52T5XDL" name="jucer_Project.cpp" compile="1" resource="0"
file="Source/model/Project/jucer_Project.cpp"/>
<FILE id="EO4eoN9a" name="jucer_Project.h" compile="0" resource="0"
file="Source/model/Project/jucer_Project.h"/>
<FILE id="SiRIHP3Ky" name="jucer_ProjectExporter.cpp" compile="1" resource="0"
file="Source/model/Project/jucer_ProjectExporter.cpp"/>
<FILE id="2h3NRNSSp" name="jucer_ProjectExporter.h" compile="0" resource="0"
file="Source/model/Project/jucer_ProjectExporter.h"/>
<FILE id="uqrOod35R" name="jucer_ProjectExport_Make.h" compile="0"
resource="0" file="Source/model/Project/jucer_ProjectExport_Make.h"/>
<FILE id="8phHwnBgr" name="jucer_ProjectExport_MSVC.h" compile="0"
resource="0" file="Source/model/Project/jucer_ProjectExport_MSVC.h"/>
<FILE id="HPljCj6zE" name="jucer_ProjectExport_XCode.h" compile="0"
resource="0" file="Source/model/Project/jucer_ProjectExport_XCode.h"/>
<FILE id="AtzLEpc" name="jucer_ProjectSaver.h" compile="0" resource="0"
file="Source/model/Project/jucer_ProjectSaver.h"/>
<FILE id="NvomVFC4G" name="jucer_ProjectWizard.cpp" compile="1" resource="0"
file="Source/model/Project/jucer_ProjectWizard.cpp"/>
<FILE id="k0RyM7mX3" name="jucer_ProjectWizard.h" compile="0" resource="0"
file="Source/model/Project/jucer_ProjectWizard.h"/>
<FILE id="TfPOOMLpj" name="jucer_ResourceFile.cpp" compile="1" resource="0"
file="Source/model/Project/jucer_ResourceFile.cpp"/>
<FILE id="RXpYUNLSg" name="jucer_ResourceFile.h" compile="0" resource="0"
file="Source/model/Project/jucer_ResourceFile.h"/>
</GROUP>
<FILE id="e6IQOUwvq" name="jucer_ComponentDocument.cpp" compile="1"
resource="0" file="Source/model/jucer_ComponentDocument.cpp"/>
<FILE id="u5n6JTb4z" name="jucer_ComponentDocument.h" compile="0" resource="0"
file="Source/model/jucer_ComponentDocument.h"/>
<FILE id="YJF79TlHr" name="jucer_CodeGenerator.cpp" compile="1" resource="0"
file="Source/model/jucer_CodeGenerator.cpp"/>
<FILE id="Wr2TBw8wQ" name="jucer_CodeGenerator.h" compile="0" resource="0"
file="Source/model/jucer_CodeGenerator.h"/>
<FILE id="lxuyJGZcw" name="jucer_Coordinate.cpp" compile="1" resource="0"
file="Source/model/jucer_Coordinate.cpp"/>
<FILE id="CyKbwNlwe" name="jucer_Coordinate.h" compile="0" resource="0"
file="Source/model/jucer_Coordinate.h"/>
<FILE id="XxIww5OtT" name="jucer_DrawableDocument.cpp" compile="1"
resource="0" file="Source/model/jucer_DrawableDocument.cpp"/>
<FILE id="lbB698APl" name="jucer_DrawableDocument.h" compile="0" resource="0"
file="Source/model/jucer_DrawableDocument.h"/>
<FILE id="W6edslpwV" name="jucer_NewFileWizard.cpp" compile="1" resource="0"
file="Source/model/jucer_NewFileWizard.cpp"/>
<FILE id="ZdXfjs3cm" name="jucer_NewFileWizard.h" compile="0" resource="0"
file="Source/model/jucer_NewFileWizard.h"/>
<FILE id="1xhl6AMel" name="jucer_Project.cpp" compile="1" resource="0"
file="Source/model/jucer_Project.cpp"/>
<FILE id="xFKtjM5IY" name="jucer_Project.h" compile="0" resource="0"
file="Source/model/jucer_Project.h"/>
<FILE id="I25pufbxN" name="jucer_ProjectExporter.cpp" compile="1" resource="0"
file="Source/model/jucer_ProjectExporter.cpp"/>
<FILE id="tlrgROke9" name="jucer_ProjectExporter.h" compile="0" resource="0"
file="Source/model/jucer_ProjectExporter.h"/>
<FILE id="CuHVcKsZ1" name="jucer_ProjectExport_Make.h" compile="0"
resource="0" file="Source/model/jucer_ProjectExport_Make.h"/>
<FILE id="siqostdgr" name="jucer_ProjectExport_MSVC.h" compile="0"
resource="0" file="Source/model/jucer_ProjectExport_MSVC.h"/>
<FILE id="TNs5meM1l" name="jucer_ProjectExport_XCode.h" compile="0"
resource="0" file="Source/model/jucer_ProjectExport_XCode.h"/>
<FILE id="8gWlotR2u" name="jucer_ProjectSaver.h" compile="0" resource="0"
file="Source/model/jucer_ProjectSaver.h"/>
<FILE id="5UqcXDyrq" name="jucer_ProjectWizard.cpp" compile="1" resource="0"
file="Source/model/jucer_ProjectWizard.cpp"/>
<FILE id="CblaK2RkX" name="jucer_ProjectWizard.h" compile="0" resource="0"
file="Source/model/jucer_ProjectWizard.h"/>
<FILE id="EUHSwOdbz" name="jucer_ResourceFile.cpp" compile="1" resource="0"
file="Source/model/jucer_ResourceFile.cpp"/>
<FILE id="M7WhM7B9G" name="jucer_ResourceFile.h" compile="0" resource="0"
file="Source/model/jucer_ResourceFile.h"/>
</GROUP>
<GROUP id="8J0PD9iW5" name="UI">
<GROUP id="Aq4VMz9t" name="Code Editor">
<FILE id="yZzVX2yqj" name="jucer_SourceCodeEditor.cpp" compile="1"
resource="0" file="Source/ui/Code Editor/jucer_SourceCodeEditor.cpp"/>
<FILE id="aZC2eXVL" name="jucer_SourceCodeEditor.h" compile="0" resource="0"
file="Source/ui/Code Editor/jucer_SourceCodeEditor.h"/>
</GROUP>
<GROUP id="d2joUoRvF" name="Component Editor">
<FILE id="m6WsEDek9" name="jucer_ComponentDragOperation.h" compile="0"
resource="0" file="Source/ui/Component Editor/jucer_ComponentDragOperation.h"/>
<FILE id="Q48V5uBKu" name="jucer_ComponentEditor.cpp" compile="1" resource="0"
file="Source/ui/Component Editor/jucer_ComponentEditor.cpp"/>
<FILE id="B1zNCvltV" name="jucer_ComponentEditor.h" compile="0" resource="0"
file="Source/ui/Component Editor/jucer_ComponentEditor.h"/>
<FILE id="3Rd2cdG1r" name="jucer_ComponentEditorCanvas.cpp" compile="1"
resource="0" file="Source/ui/Component Editor/jucer_ComponentEditorCanvas.cpp"/>
<FILE id="PYpzAE3jK" name="jucer_ComponentEditorCanvas.h" compile="0"
resource="0" file="Source/ui/Component Editor/jucer_ComponentEditorCanvas.h"/>
<FILE id="pqP7rsm8g" name="jucer_ComponentEditorCodeView.h" compile="0"
@@ -126,27 +130,29 @@
file="Source/ui/Drawable Editor/jucer_DrawableEditor.cpp"/>
<FILE id="66AHRmzWg" name="jucer_DrawableEditor.h" compile="0" resource="0"
file="Source/ui/Drawable Editor/jucer_DrawableEditor.h"/>
<FILE id="rBnlhpny1" name="jucer_DrawableObjectComponent.h" compile="0"
resource="0" file="Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h"/>
<FILE id="orshHF5Az" name="jucer_DrawableTreeviewItem.h" compile="0"
resource="0" file="Source/ui/Drawable Editor/jucer_DrawableTreeviewItem.h"/>
<FILE id="fl8nLMRQB" name="jucer_DrawableEditorCanvas.h" compile="0"
resource="0" file="Source/ui/Drawable Editor/jucer_DrawableEditorCanvas.h"/>
<FILE id="NzwakrI5" name="jucer_DrawableEditorToolbar.h" compile="0"
resource="0" file="Source/ui/Drawable Editor/jucer_DrawableEditorToolbar.h"/>
<FILE id="ORcbUPiNo" name="jucer_DrawableEditorTreeView.h" compile="0"
resource="0" file="Source/ui/Drawable Editor/jucer_DrawableEditorTreeView.h"/>
</GROUP>
<GROUP id="DC6B03UF" name="Editor Base">
<FILE id="am9MUoCGw" name="jucer_EditorCanvas.cpp" compile="1" resource="0"
file="Source/ui/Editor Base/jucer_EditorCanvas.cpp"/>
<FILE id="3JNJWgTRC" name="jucer_EditorCanvas.h" compile="0" resource="0"
file="Source/ui/Editor Base/jucer_EditorCanvas.h"/>
<FILE id="0Pma8CXyT" name="jucer_EditorDragOperation.h" compile="0"
resource="0" file="Source/ui/Editor Base/jucer_EditorDragOperation.h"/>
<FILE id="zmldA8b" name="jucer_EditorPanel.h" compile="0" resource="0"
file="Source/ui/Editor Base/jucer_EditorPanel.h"/>
</GROUP>
<FILE id="uuKrNBIAS" name="jucer_CommandIDs.h" compile="0" resource="0"
file="Source/ui/jucer_CommandIDs.h"/>
<FILE id="nKydCEjQp" name="jucer_CoordinatePropertyComponent.h" compile="0"
resource="0" file="Source/ui/jucer_CoordinatePropertyComponent.h"/>
<FILE id="p410VfaaI" name="jucer_DocumentEditorComponent.cpp" compile="1"
resource="0" file="Source/ui/jucer_DocumentEditorComponent.cpp"/>
<FILE id="OyWSiFRV8" name="jucer_DocumentEditorComponent.h" compile="0"
resource="0" file="Source/ui/jucer_DocumentEditorComponent.h"/>
<FILE id="qKXe4ZJk" name="jucer_GroupInformationComponent.cpp" compile="1"
resource="0" file="Source/ui/jucer_GroupInformationComponent.cpp"/>
<FILE id="B7Trw1pL" name="jucer_GroupInformationComponent.h" compile="0"
resource="0" file="Source/ui/jucer_GroupInformationComponent.h"/>
<FILE id="SrG56RyDc" name="jucer_ItemPreviewComponent.cpp" compile="1"
resource="0" file="Source/ui/jucer_ItemPreviewComponent.cpp"/>
<FILE id="QkIGvWJEl" name="jucer_ItemPreviewComponent.h" compile="0"
resource="0" file="Source/ui/jucer_ItemPreviewComponent.h"/>
<FILE id="YoCYXKlw1" name="jucer_JucerTreeViewBase.cpp" compile="1"
resource="0" file="Source/ui/jucer_JucerTreeViewBase.cpp"/>
<FILE id="qIZzQUNrv" name="jucer_JucerTreeViewBase.h" compile="0" resource="0"
@@ -159,32 +165,46 @@
resource="0" file="Source/ui/jucer_OpenDocumentManager.cpp"/>
<FILE id="3dKt81z9" name="jucer_OpenDocumentManager.h" compile="0"
resource="0" file="Source/ui/jucer_OpenDocumentManager.h"/>
<FILE id="V5gS2pEfy" name="jucer_ProjectContentComponent.cpp" compile="1"
resource="0" file="Source/ui/jucer_ProjectContentComponent.cpp"/>
<FILE id="tG51D8f1Z" name="jucer_ProjectContentComponent.h" compile="0"
resource="0" file="Source/ui/jucer_ProjectContentComponent.h"/>
<FILE id="4zWRyKEs9" name="jucer_ProjectInformationComponent.cpp" compile="1"
resource="0" file="Source/ui/jucer_ProjectInformationComponent.cpp"/>
<FILE id="WE75dKj97" name="jucer_ProjectInformationComponent.h" compile="0"
resource="0" file="Source/ui/jucer_ProjectInformationComponent.h"/>
<FILE id="LrAM68c7J" name="jucer_ProjectTreeViewBase.cpp" compile="1"
resource="0" file="Source/ui/jucer_ProjectTreeViewBase.cpp"/>
<FILE id="Kn5VMY6M" name="jucer_ProjectTreeViewBase.h" compile="0"
resource="0" file="Source/ui/jucer_ProjectTreeViewBase.h"/>
<FILE id="p9vRPSCY2" name="jucer_SourceCodeEditor.cpp" compile="1"
resource="0" file="Source/ui/jucer_SourceCodeEditor.cpp"/>
<FILE id="bY5hCm4jo" name="jucer_SourceCodeEditor.h" compile="0" resource="0"
file="Source/ui/jucer_SourceCodeEditor.h"/>
<FILE id="areTSB8vc" name="jucer_TreeViewTypes.cpp" compile="1" resource="0"
file="Source/ui/jucer_TreeViewTypes.cpp"/>
<FILE id="uzCI50bmN" name="jucer_TreeViewTypes.h" compile="0" resource="0"
file="Source/ui/jucer_TreeViewTypes.h"/>
<GROUP id="RUNKf0D3O" name="Project Editor">
<FILE id="7No4c1oG9" name="jucer_GroupInformationComponent.cpp" compile="1"
resource="0" file="Source/ui/Project Editor/jucer_GroupInformationComponent.cpp"/>
<FILE id="bbI560U6U" name="jucer_GroupInformationComponent.h" compile="0"
resource="0" file="Source/ui/Project Editor/jucer_GroupInformationComponent.h"/>
<FILE id="Qm2T8C7Pl" name="jucer_ItemPreviewComponent.cpp" compile="1"
resource="0" file="Source/ui/Project Editor/jucer_ItemPreviewComponent.cpp"/>
<FILE id="uf8WmnsG5" name="jucer_ItemPreviewComponent.h" compile="0"
resource="0" file="Source/ui/Project Editor/jucer_ItemPreviewComponent.h"/>
<FILE id="u1V080fB" name="jucer_ProjectContentComponent.cpp" compile="1"
resource="0" file="Source/ui/Project Editor/jucer_ProjectContentComponent.cpp"/>
<FILE id="TmYoyJboy" name="jucer_ProjectContentComponent.h" compile="0"
resource="0" file="Source/ui/Project Editor/jucer_ProjectContentComponent.h"/>
<FILE id="87f08TAiX" name="jucer_ProjectInformationComponent.cpp" compile="1"
resource="0" file="Source/ui/Project Editor/jucer_ProjectInformationComponent.cpp"/>
<FILE id="3Eiw7PzIU" name="jucer_ProjectInformationComponent.h" compile="0"
resource="0" file="Source/ui/Project Editor/jucer_ProjectInformationComponent.h"/>
<FILE id="2W5ZoQvq7" name="jucer_ProjectTreeViewBase.cpp" compile="1"
resource="0" file="Source/ui/Project Editor/jucer_ProjectTreeViewBase.cpp"/>
<FILE id="Rp1EojtV7" name="jucer_ProjectTreeViewBase.h" compile="0"
resource="0" file="Source/ui/Project Editor/jucer_ProjectTreeViewBase.h"/>
<FILE id="guPUbBpR" name="jucer_TreeViewTypes.cpp" compile="1" resource="0"
file="Source/ui/Project Editor/jucer_TreeViewTypes.cpp"/>
<FILE id="dofqja5Yb" name="jucer_TreeViewTypes.h" compile="0" resource="0"
file="Source/ui/Project Editor/jucer_TreeViewTypes.h"/>
</GROUP>
</GROUP>
<GROUP id="wje6dWhDW" name="Utility">
<FILE id="hmWl0ODQe" name="jucer_ColourEditorComponent.h" compile="0"
resource="0" file="Source/utility/jucer_ColourEditorComponent.h"/>
<FILE id="bjibbvm3S" name="jucer_Colours.h" compile="0" resource="0"
file="Source/utility/jucer_Colours.h"/>
<FILE id="bDebnoSX" name="jucer_Coordinate.cpp" compile="1" resource="0"
file="Source/utility/jucer_Coordinate.cpp"/>
<FILE id="uqXX3Ga6S" name="jucer_Coordinate.h" compile="0" resource="0"
file="Source/utility/jucer_Coordinate.h"/>
<FILE id="DDCunFHcy" name="jucer_CoordinatePropertyComponent.h" compile="0"
resource="0" file="Source/utility/jucer_CoordinatePropertyComponent.h"/>
<FILE id="ZYrHhSqnP" name="jucer_MarkerListBase.h" compile="0" resource="0"
file="Source/utility/jucer_MarkerListBase.h"/>
<FILE id="nMKxowe0" name="jucer_RelativePath.h" compile="0" resource="0"
file="Source/utility/jucer_RelativePath.h"/>
<FILE id="gb8kYJDkJ" name="jucer_StoredSettings.cpp" compile="1" resource="0"


+ 4
- 0
extras/Jucer (experimental)/Source/jucer_Headers.h View File

@@ -56,5 +56,9 @@ const char* const headerFileExtensions = "h;hpp";
const int numSwatchColours = 24;
const int snapSizes[] = { 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 32 };
const float snapDistance = 8.0f;
static const Colour alignmentMarkerColour (0x77ff0000);
static const Colour resizableBorderColour (0x7066aaff);
#endif // __JUCER_HEADERS_JUCEHEADER__

extras/Jucer (experimental)/Source/model/Component Types/jucer_ComboBox.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComboBox.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.cpp → extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComponentTypeManager.cpp View File

@@ -25,7 +25,7 @@
#include "jucer_ComponentTypeManager.h"
#include "jucer_ComponentTypes.h"
#include "../../ui/jucer_CoordinatePropertyComponent.h"
#include "../../../utility/jucer_CoordinatePropertyComponent.h"
//==============================================================================
@@ -191,7 +191,9 @@ void ComponentTypeHandler::initialiseNewItem (ComponentDocument& document, Value
const Rectangle<int> bounds (getDefaultSize().withPosition (Point<int> (Random::getSystemRandom().nextInt (100) + 100,
Random::getSystemRandom().nextInt (100) + 100)));
state.setProperty (ComponentDocument::compBoundsProperty, RectangleCoordinates (bounds, state [ComponentDocument::memberNameProperty]).toString(), 0);
state.setProperty (ComponentDocument::compBoundsProperty,
RectangleCoordinates (bounds.toFloat(),
state [ComponentDocument::memberNameProperty]).toString(), 0);
}

extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypeManager.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComponentTypeManager.h View File

@@ -26,9 +26,9 @@
#ifndef __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__
#define __JUCER_COMPONENTTYPEMANAGER_H_734EBF1__
#include "../../jucer_Headers.h"
#include "../../../jucer_Headers.h"
#include "../jucer_ComponentDocument.h"
#include "../../utility/jucer_ColourEditorComponent.h"
#include "../../../utility/jucer_ColourEditorComponent.h"
//==============================================================================

extras/Jucer (experimental)/Source/model/Component Types/jucer_ComponentTypes.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_ComponentTypes.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_GenericComponent.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_GenericComponent.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_GroupComponent.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_GroupComponent.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_JucerComponent.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_JucerComponent.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_Label.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_Label.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_Slider.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_Slider.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_TabbedComponent.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_TabbedComponent.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_TextButton.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_TextButton.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_TextEditor.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_TextEditor.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_ToggleButton.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_ToggleButton.h View File


extras/Jucer (experimental)/Source/model/Component Types/jucer_Viewport.h → extras/Jucer (experimental)/Source/model/Component/Types/jucer_Viewport.h View File


extras/Jucer (experimental)/Source/model/jucer_CodeGenerator.cpp → extras/Jucer (experimental)/Source/model/Component/jucer_CodeGenerator.cpp View File


extras/Jucer (experimental)/Source/model/jucer_CodeGenerator.h → extras/Jucer (experimental)/Source/model/Component/jucer_CodeGenerator.h View File

@@ -26,8 +26,8 @@
#ifndef __JUCER_CODEGENERATOR_H_F79AEF58__
#define __JUCER_CODEGENERATOR_H_F79AEF58__
#include "../jucer_Headers.h"
#include "jucer_Project.h"
#include "../../jucer_Headers.h"
#include "../Project/jucer_Project.h"
//==============================================================================

extras/Jucer (experimental)/Source/model/jucer_ComponentDocument.cpp → extras/Jucer (experimental)/Source/model/Component/jucer_ComponentDocument.cpp View File

@@ -24,8 +24,8 @@
*/
#include "jucer_ComponentDocument.h"
#include "Component Types/jucer_ComponentTypeManager.h"
#include "../ui/jucer_CoordinatePropertyComponent.h"
#include "Types/jucer_ComponentTypeManager.h"
#include "../../utility/jucer_CoordinatePropertyComponent.h"
//==============================================================================
@@ -33,7 +33,6 @@ static const char* const componentDocumentTag = "COMPONENT";
static const char* const componentGroupTag = "COMPONENTS";
static const char* const markersGroupXTag = "MARKERS_X";
static const char* const markersGroupYTag = "MARKERS_Y";
static const char* const markerTag = "MARKER";
static const char* const metadataTagStart = "JUCER_" "COMPONENT_METADATA_START"; // written like this to avoid thinking this file is a component!
static const char* const metadataTagEnd = "JUCER_" "COMPONENT_METADATA_END";
@@ -44,8 +43,6 @@ const char* const ComponentDocument::memberNameProperty = "memberName";
const char* const ComponentDocument::compNameProperty = "name";
const char* const ComponentDocument::compTooltipProperty = "tooltip";
const char* const ComponentDocument::compFocusOrderProperty = "focusOrder";
const char* const ComponentDocument::markerNameProperty = "name";
const char* const ComponentDocument::markerPosProperty = "position";
//==============================================================================
@@ -575,71 +572,21 @@ const String ComponentDocument::getNonExistentMemberName (String suggestedName)
//==============================================================================
ComponentDocument::MarkerList::MarkerList (ComponentDocument& document_, const bool isX_)
: document (document_),
group (document_.getRoot().getChildWithName (isX_ ? markersGroupXTag : markersGroupYTag)),
isX (isX_)
: MarkerListBase (document_.getRoot().getChildWithName (isX_ ? markersGroupXTag : markersGroupYTag), isX_),
document (document_)
{
jassert (group.isValid());
jassert (group.isAChildOf (document_.getRoot()));
}
ValueTree& ComponentDocument::MarkerList::getGroup()
UndoManager* ComponentDocument::MarkerList::getUndoManager() const
{
return group;
return document.getUndoManager();
}
int ComponentDocument::MarkerList::size() const
const String ComponentDocument::MarkerList::getNonexistentMarkerName (const String& name)
{
return group.getNumChildren();
}
ValueTree ComponentDocument::MarkerList::getMarker (int index) const
{
return group.getChild (index);
}
ValueTree ComponentDocument::MarkerList::getMarkerNamed (const String& name) const
{
return group.getChildWithProperty (markerNameProperty, name);
}
bool ComponentDocument::MarkerList::contains (const ValueTree& markerState) const
{
return markerState.isAChildOf (group);
}
const Coordinate ComponentDocument::MarkerList::getCoordinate (const ValueTree& markerState) const
{
return Coordinate (markerState [markerPosProperty].toString(), isX);
}
const String ComponentDocument::MarkerList::getName (const ValueTree& markerState) const
{
return markerState [markerNameProperty].toString();
}
Value ComponentDocument::MarkerList::getNameAsValue (const ValueTree& markerState) const
{
return markerState.getPropertyAsValue (markerNameProperty, document.getUndoManager());
}
void ComponentDocument::MarkerList::setCoordinate (ValueTree& markerState, const Coordinate& newCoord)
{
markerState.setProperty (markerPosProperty, newCoord.toString(), document.getUndoManager());
}
void ComponentDocument::MarkerList::createMarker (const String& name, int position)
{
ValueTree marker (markerTag);
marker.setProperty (markerNameProperty, document.getNonexistentMarkerName (name), 0);
marker.setProperty (markerPosProperty, Coordinate (position, isX).toString(), 0);
marker.setProperty (idProperty, createAlphaNumericUID(), 0);
group.addChild (marker, -1, document.getUndoManager());
}
void ComponentDocument::MarkerList::deleteMarker (ValueTree& markerState)
{
group.removeChild (markerState, document.getUndoManager());
return document.getNonexistentMarkerName (name);
}
const Coordinate ComponentDocument::MarkerList::findMarker (const String& name, bool isHorizontal) const
@@ -729,21 +676,16 @@ private:
ValueTree markerState;
};
void ComponentDocument::MarkerList::createMarkerProperties (Array <PropertyComponent*>& props, ValueTree& marker)
{
props.add (new TextPropertyComponent (getNameAsValue (marker), "Marker Name", 256, false));
props.add (new MarkerPositionComponent (document, "Position", marker,
marker.getPropertyAsValue (markerPosProperty, document.getUndoManager()),
contains (marker)));
}
bool ComponentDocument::MarkerList::createProperties (Array <PropertyComponent*>& props, const String& itemId)
{
ValueTree marker (group.getChildWithProperty (idProperty, itemId));
if (marker.isValid())
{
createMarkerProperties (props, marker);
props.add (new TextPropertyComponent (getNameAsValue (marker), "Marker Name", 256, false));
props.add (new MarkerPositionComponent (document, "Position", marker,
marker.getPropertyAsValue (getMarkerPosProperty(), document.getUndoManager()),
contains (marker)));
return true;
}

extras/Jucer (experimental)/Source/model/jucer_ComponentDocument.h → extras/Jucer (experimental)/Source/model/Component/jucer_ComponentDocument.h View File

@@ -26,9 +26,10 @@
#ifndef __JUCER_COMPONENTDOCUMENT_JUCEHEADER__
#define __JUCER_COMPONENTDOCUMENT_JUCEHEADER__
#include "../jucer_Headers.h"
#include "jucer_Project.h"
#include "jucer_Coordinate.h"
#include "../../jucer_Headers.h"
#include "../Project/jucer_Project.h"
#include "../../utility/jucer_Coordinate.h"
#include "../../utility/jucer_MarkerListBase.h"
#include "jucer_CodeGenerator.h"
@@ -86,36 +87,20 @@ public:
void performNewComponentMenuItem (int menuResultCode);
//==============================================================================
class MarkerList : public Coordinate::MarkerResolver
class MarkerList : public MarkerListBase
{
public:
MarkerList (ComponentDocument& document, bool isX);
ValueTree& getGroup();
int size() const;
ValueTree getMarker (int index) const;
ValueTree getMarkerNamed (const String& name) const;
bool contains (const ValueTree& markerState) const;
const Coordinate getCoordinate (const ValueTree& markerState) const;
const String getName (const ValueTree& markerState) const;
Value getNameAsValue (const ValueTree& markerState) const;
void setCoordinate (ValueTree& markerState, const Coordinate& newCoord);
void createMarker (const String& name, int position);
void deleteMarker (ValueTree& markerState);
// for Coordinate::MarkerResolver:
const Coordinate findMarker (const String& name, bool isHorizontal) const;
bool createProperties (Array <PropertyComponent*>& props, const String& itemId);
void createMarkerProperties (Array <PropertyComponent*>& props, ValueTree& marker);
void addMarkerMenuItems (const ValueTree& markerState, const Coordinate& coord, PopupMenu& menu, bool isAnchor1);
const String getChosenMarkerMenuItem (const Coordinate& coord, int itemId) const;
UndoManager* getUndoManager() const;
const String getNonexistentMarkerName (const String& name);
private:
ComponentDocument& document;
ValueTree group;
const bool isX;
MarkerList (const MarkerList&);
MarkerList& operator= (const MarkerList&);
@@ -162,8 +147,6 @@ public:
static const char* const compNameProperty;
static const char* const compTooltipProperty;
static const char* const compFocusOrderProperty;
static const char* const markerNameProperty;
static const char* const markerPosProperty;
static const char* const jucerIDProperty;
static const String getJucerIDFor (Component* c);

+ 406
- 0
extras/Jucer (experimental)/Source/model/Drawable/jucer_DrawableDocument.cpp View File

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

extras/Jucer (experimental)/Source/model/jucer_DrawableDocument.h → extras/Jucer (experimental)/Source/model/Drawable/jucer_DrawableDocument.h View File

@@ -26,14 +26,15 @@
#ifndef __JUCER_DRAWABLEDOCUMENT_JUCEHEADER__
#define __JUCER_DRAWABLEDOCUMENT_JUCEHEADER__
#include "../jucer_Headers.h"
#include "jucer_Project.h"
#include "../../jucer_Headers.h"
#include "../Project/jucer_Project.h"
#include "../../utility/jucer_Coordinate.h"
#include "../../utility/jucer_MarkerListBase.h"
//==============================================================================
class DrawableDocument : public ValueTree::Listener,
public ChangeBroadcaster,
public Timer
public ChangeBroadcaster
{
public:
//==============================================================================
@@ -49,34 +50,75 @@ public:
bool hasChangedSinceLastSave() const;
void changed();
ValueTree& getRoot() { return root; }
ValueTree getRootDrawableNode() const;
void addRectangle();
void addCircle();
void addImage (const File& imageFile);
Value getCanvasWidth() const { return getRootValueNonUndoable ("width"); }
Value getCanvasHeight() const { return getRootValueNonUndoable ("height"); }
static const String getIdFor (const ValueTree& object);
//==============================================================================
class MarkerList : public MarkerListBase
{
public:
MarkerList (DrawableDocument& document, bool isX);
~MarkerList() {}
const Coordinate findMarker (const String& name, bool isHorizontal) const;
bool createProperties (Array <PropertyComponent*>& props, const String& itemId);
void addMarkerMenuItems (const ValueTree& markerState, const Coordinate& coord, PopupMenu& menu, bool isAnchor1);
const String getChosenMarkerMenuItem (const Coordinate& coord, int itemId) const;
UndoManager* getUndoManager() const;
const String getNonexistentMarkerName (const String& name);
private:
DrawableDocument& document;
MarkerList (const MarkerList&);
MarkerList& operator= (const MarkerList&);
};
MarkerList& getMarkerListX() const { return *markersX; }
MarkerList& getMarkerListY() const { return *markersY; }
MarkerList& getMarkerList (bool isX) const { return isX ? *markersX : *markersY; }
const String getNonexistentMarkerName (const String& name);
//==============================================================================
void valueTreePropertyChanged (ValueTree& tree, const var::identifier& name);
void valueTreeChildrenChanged (ValueTree& tree);
void valueTreeParentChanged (ValueTree& tree);
void timerCallback();
//==============================================================================
UndoManager* getUndoManager() throw() { return &undoManager; }
UndoManager* getUndoManager() const throw() { return &undoManager; }
private:
Project* project;
File drawableFile;
ValueTree drawableRoot;
UndoManager undoManager;
ValueTree root;
ScopedPointer<MarkerList> markersX, markersY;
mutable UndoManager undoManager;
bool saveAsXml, needsSaving;
void checkRootObject();
Value getRootValueUndoable (const var::identifier& name) const { return root.getPropertyAsValue (name, getUndoManager()); }
Value getRootValueNonUndoable (const var::identifier& name) const { return root.getPropertyAsValue (name, 0); }
void save (OutputStream& output);
bool load (InputStream& input);
void addMissingIds (ValueTree tree) const;
void addDrawable (Drawable& d);
const Coordinate findMarker (const String& name, bool isHorizontal) const;
void addMarkerMenuItem (int i, const Coordinate& coord, const String& name, PopupMenu& menu,
bool isAnchor1, const String& fullCoordName);
};

extras/Jucer (experimental)/Source/model/jucer_NewFileWizard.cpp → extras/Jucer (experimental)/Source/model/Project/jucer_NewFileWizard.cpp View File

@@ -24,8 +24,8 @@
*/
#include "jucer_NewFileWizard.h"
#include "jucer_DrawableDocument.h"
#include "jucer_ComponentDocument.h"
#include "../Drawable/jucer_DrawableDocument.h"
#include "../Component/jucer_ComponentDocument.h"
//==============================================================================

extras/Jucer (experimental)/Source/model/jucer_NewFileWizard.h → extras/Jucer (experimental)/Source/model/Project/jucer_NewFileWizard.h View File

@@ -26,7 +26,7 @@
#ifndef __JUCER_NEWFILEWIZARD_JUCEHEADER__
#define __JUCER_NEWFILEWIZARD_JUCEHEADER__
#include "../jucer_Headers.h"
#include "../../jucer_Headers.h"
#include "jucer_Project.h"

extras/Jucer (experimental)/Source/model/jucer_Project.cpp → extras/Jucer (experimental)/Source/model/Project/jucer_Project.cpp View File

@@ -27,7 +27,7 @@
#include "jucer_ProjectExporter.h"
#include "jucer_ResourceFile.h"
#include "jucer_ProjectSaver.h"
#include "../ui/jucer_OpenDocumentManager.h"
#include "../../ui/jucer_OpenDocumentManager.h"
//==============================================================================

extras/Jucer (experimental)/Source/model/jucer_Project.h → extras/Jucer (experimental)/Source/model/Project/jucer_Project.h View File

@@ -26,7 +26,7 @@
#ifndef __JUCER_PROJECT_JUCEHEADER__
#define __JUCER_PROJECT_JUCEHEADER__
#include "../jucer_Headers.h"
#include "../../jucer_Headers.h"
class ProjectExporter;
//==============================================================================

extras/Jucer (experimental)/Source/model/jucer_ProjectExport_MSVC.h → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExport_MSVC.h View File


extras/Jucer (experimental)/Source/model/jucer_ProjectExport_Make.h → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExport_Make.h View File


extras/Jucer (experimental)/Source/model/jucer_ProjectExport_XCode.h → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExport_XCode.h View File


extras/Jucer (experimental)/Source/model/jucer_ProjectExporter.cpp → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExporter.cpp View File


extras/Jucer (experimental)/Source/model/jucer_ProjectExporter.h → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectExporter.h View File

@@ -26,7 +26,7 @@
#ifndef __JUCER_PROJECTEXPORTER_JUCEHEADER__
#define __JUCER_PROJECTEXPORTER_JUCEHEADER__
#include "../jucer_Headers.h"
#include "../../jucer_Headers.h"
#include "jucer_Project.h"

extras/Jucer (experimental)/Source/model/jucer_ProjectSaver.h → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectSaver.h View File


extras/Jucer (experimental)/Source/model/jucer_ProjectWizard.cpp → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectWizard.cpp View File


extras/Jucer (experimental)/Source/model/jucer_ProjectWizard.h → extras/Jucer (experimental)/Source/model/Project/jucer_ProjectWizard.h View File

@@ -26,7 +26,7 @@
#ifndef __JUCER_PROJECTWIZARD_JUCEHEADER__
#define __JUCER_PROJECTWIZARD_JUCEHEADER__
#include "../jucer_Headers.h"
#include "../../jucer_Headers.h"
#include "jucer_Project.h"

extras/Jucer (experimental)/Source/model/jucer_ResourceFile.cpp → extras/Jucer (experimental)/Source/model/Project/jucer_ResourceFile.cpp View File

@@ -24,8 +24,8 @@
*/
#include "jucer_ResourceFile.h"
#include "../ui/jucer_ProjectTreeViewBase.h"
#include "../ui/jucer_OpenDocumentManager.h"
#include "../../ui/Project Editor/jucer_ProjectTreeViewBase.h"
#include "../../ui/jucer_OpenDocumentManager.h"
static const char* resourceFileIdentifierString = "JUCER_BINARY_RESOURCE";

extras/Jucer (experimental)/Source/model/jucer_ResourceFile.h → extras/Jucer (experimental)/Source/model/Project/jucer_ResourceFile.h View File

@@ -26,7 +26,7 @@
#ifndef __JUCER_RESOURCEFILE_JUCEHEADER__
#define __JUCER_RESOURCEFILE_JUCEHEADER__
#include "../jucer_Headers.h"
#include "../../jucer_Headers.h"
#include "jucer_Project.h"

+ 0
- 253
extras/Jucer (experimental)/Source/model/jucer_DrawableDocument.cpp View File

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

extras/Jucer (experimental)/Source/ui/jucer_SourceCodeEditor.cpp → extras/Jucer (experimental)/Source/ui/Code Editor/jucer_SourceCodeEditor.cpp View File

@@ -24,7 +24,7 @@
*/
#include "jucer_SourceCodeEditor.h"
#include "jucer_OpenDocumentManager.h"
#include "../jucer_OpenDocumentManager.h"
//==============================================================================

extras/Jucer (experimental)/Source/ui/jucer_SourceCodeEditor.h → extras/Jucer (experimental)/Source/ui/Code Editor/jucer_SourceCodeEditor.h View File

@@ -26,8 +26,8 @@
#ifndef __JUCER_SOURCECODEEDITOR_JUCEHEADER__
#define __JUCER_SOURCECODEEDITOR_JUCEHEADER__
#include "../model/jucer_Project.h"
#include "jucer_DocumentEditorComponent.h"
#include "../../model/Project/jucer_Project.h"
#include "../jucer_DocumentEditorComponent.h"
//==============================================================================

+ 105
- 113
extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditor.cpp View File

@@ -24,7 +24,12 @@
*/
#include "../../jucer_Headers.h"
#include "../../model/Component/jucer_ComponentDocument.h"
#include "../jucer_JucerTreeViewBase.h"
#include "../Editor Base/jucer_EditorDragOperation.h"
#include "../Editor Base/jucer_EditorPanel.h"
#include "jucer_ComponentEditor.h"
#include "jucer_ComponentEditorCanvas.h"
#include "jucer_ComponentEditorTreeView.h"
#include "jucer_ComponentEditorCodeView.h"
#include "jucer_ComponentEditorToolbar.h"
@@ -61,132 +66,39 @@ private:
//==============================================================================
class ComponentEditor::LayoutEditorHolder : public Component
class ComponentEditor::LayoutEditorHolder : public EditorPanelBase
{
public:
LayoutEditorHolder (ComponentEditor& editor_)
: toolbarFactory (editor_), editor (editor_), infoPanel (0), tree (0)
: toolbarFactory (editor_),
editor (editor_)
{
addAndMakeVisible (toolbar = new Toolbar());
toolbar->addDefaultItems (toolbarFactory);
toolbar->setStyle (Toolbar::textOnly);
addAndMakeVisible (viewport = new Viewport());
addChildComponent (tree = new TreeView());
tree->setRootItemVisible (true);
tree->setMultiSelectEnabled (true);
tree->setDefaultOpenness (true);
tree->setColour (TreeView::backgroundColourId, Colours::white);
tree->setIndentSize (15);
}
~LayoutEditorHolder()
{
tree->deleteRootItem();
deleteAndZero (infoPanel);
deleteAllChildren();
shutdown();
}
void createCanvas()
{
viewport->setViewedComponent (new ComponentEditorCanvas (editor));
addAndMakeVisible (infoPanel = new InfoPanel (editor));
tree->setRootItem (new ComponentEditorTreeView::Root (editor));
resized();
}
void resized()
{
const int toolbarHeight = 22;
toolbar->setBounds (0, 0, getWidth(), toolbarHeight);
int infoPanelWidth = 200;
if (infoPanel != 0 && infoPanel->isVisible())
infoPanel->setBounds (getWidth() - infoPanelWidth, toolbar->getBottom(), infoPanelWidth, getHeight() - toolbar->getBottom());
else
infoPanelWidth = 0;
if (tree->isVisible())
{
tree->setBounds (0, toolbar->getBottom(), infoPanelWidth, getHeight() - toolbar->getBottom());
viewport->setBounds (infoPanelWidth, toolbar->getBottom(), getWidth() - infoPanelWidth * 2, getHeight() - toolbar->getBottom());
}
else
{
viewport->setBounds (0, toolbar->getBottom(), getWidth() - infoPanelWidth, getHeight() - toolbar->getBottom());
}
initialise (new ComponentEditorCanvas (editor), toolbarFactory,
new ComponentEditorTreeView::Root (editor));
}
void showOrHideProperties()
SelectedItemSet<String>& getSelection()
{
infoPanel->setVisible (! infoPanel->isVisible());
resized();
return editor.getSelection();
}
void showOrHideTree()
void getSelectedItemProperties (Array<PropertyComponent*>& newComps)
{
tree->setVisible (! tree->isVisible());
resized();
editor.getSelectedItemProperties (newComps);
}
Viewport* getViewport() const { return viewport; }
private:
//==============================================================================
class InfoPanel : public Component,
public ChangeListener
{
public:
InfoPanel (ComponentEditor& editor_)
: editor (editor_)
{
setOpaque (true);
addAndMakeVisible (props = new PropertyPanel());
editor.getCanvas()->getSelection().addChangeListener (this);
}
~InfoPanel()
{
editor.getCanvas()->getSelection().removeChangeListener (this);
props->clear();
deleteAllChildren();
}
void changeListenerCallback (void*)
{
Array <PropertyComponent*> newComps;
editor.getCanvas()->getSelectedItemProperties (newComps);
props->clear();
props->addProperties (newComps);
}
void paint (Graphics& g)
{
g.fillAll (Colour::greyLevel (0.92f));
}
void resized()
{
props->setSize (getWidth(), getHeight());
}
private:
ComponentEditor& editor;
PropertyPanel* props;
};
Toolbar* toolbar;
ComponentEditorToolbarFactory toolbarFactory;
ComponentEditor& editor;
Viewport* viewport;
InfoPanel* infoPanel;
TreeView* tree;
};
//==============================================================================
@@ -231,6 +143,7 @@ ComponentEditor::ComponentEditor (OpenDocumentManager::Document* document,
addAndMakeVisible (tabs = new TabbedComponent (TabbedButtonBar::TabsAtRight));
tabs->setTabBarDepth (22);
tabs->setOutline (0);
tabs->addTab ("Class Settings", Colour::greyLevel (0.88f), classInfoHolder, true);
tabs->addTab ("Components", Colours::white, layoutEditorHolder, true);
@@ -255,18 +168,97 @@ void ComponentEditor::resized()
tabs->setBounds (getLocalBounds());
}
ComponentEditorCanvas* ComponentEditor::getCanvas() const
const StringArray ComponentEditor::getSelectedIds() const
{
StringArray ids;
const int num = selection.getNumSelected();
for (int i = 0; i < num; ++i)
ids.add (selection.getSelectedItem(i));
return ids;
}
void ComponentEditor::getSelectedItemProperties (Array <PropertyComponent*>& props)
{
return dynamic_cast <ComponentEditorCanvas*> (getViewport()->getViewedComponent());
getDocument().createItemProperties (props, getSelectedIds());
}
void ComponentEditor::deleteSelection()
{
const StringArray ids (getSelectedIds());
getSelection().deselectAll();
getDocument().beginNewTransaction();
for (int i = ids.size(); --i >= 0;)
{
const ValueTree comp (getDocument().getComponentWithID (ids[i]));
if (comp.isValid())
getDocument().removeComponent (comp);
}
getDocument().beginNewTransaction();
}
Viewport* ComponentEditor::getViewport() const
void ComponentEditor::deselectNonComponents()
{
return layoutEditorHolder->getViewport();
EditorCanvasBase::SelectedItems& sel = getSelection();
for (int i = sel.getNumSelected(); --i >= 0;)
if (! getDocument().getComponentWithID (sel.getSelectedItem (i)).isValid())
sel.deselect (sel.getSelectedItem (i));
}
void ComponentEditor::selectionToFront()
{
getDocument().beginNewTransaction();
int index = 0;
for (int i = getDocument().getNumComponents(); --i >= 0;)
{
const ValueTree comp (getDocument().getComponent (index));
if (comp.isValid() && getSelection().isSelected (comp [ComponentDocument::idProperty]))
{
ValueTree parent (comp.getParent());
parent.moveChild (parent.indexOf (comp), -1, getDocument().getUndoManager());
}
else
{
++index;
}
}
getDocument().beginNewTransaction();
}
void ComponentEditor::selectionToBack()
{
getDocument().beginNewTransaction();
int index = getDocument().getNumComponents() - 1;
for (int i = getDocument().getNumComponents(); --i >= 0;)
{
const ValueTree comp (getDocument().getComponent (index));
if (comp.isValid() && getSelection().isSelected (comp [ComponentDocument::idProperty]))
{
ValueTree parent (comp.getParent());
parent.moveChild (parent.indexOf (comp), 0, getDocument().getUndoManager());
}
else
{
--index;
}
}
getDocument().beginNewTransaction();
}
//==============================================================================
class TestComponent : public ComponentEditorCanvas::ComponentHolder
class TestComponent : public Component
{
public:
TestComponent (ComponentDocument& document_)
@@ -278,6 +270,7 @@ public:
~TestComponent()
{
deleteAllChildren();
}
void resized()
@@ -285,8 +278,7 @@ public:
document.getCanvasWidth() = getWidth();
document.getCanvasHeight() = getHeight();
ComponentEditorCanvas::ComponentHolder::resized();
updateComponents (document, selected);
ComponentEditorCanvas::updateComponentsIn (this, document, selected);
}
private:
@@ -383,11 +375,11 @@ bool ComponentEditor::perform (const InvocationInfo& info)
return true;
case CommandIDs::toFront:
getCanvas()->selectionToFront();
selectionToFront();
return true;
case CommandIDs::toBack:
getCanvas()->selectionToBack();
selectionToBack();
return true;
case CommandIDs::test:
@@ -403,7 +395,7 @@ bool ComponentEditor::perform (const InvocationInfo& info)
return true;
case StandardApplicationCommandIDs::del:
getCanvas()->deleteSelection();
deleteSelection();
return true;
default:


+ 14
- 3
extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditor.h View File

@@ -26,7 +26,9 @@
#ifndef __JUCE_COMPONENTEDITOR_H_6CAE6B7E__
#define __JUCE_COMPONENTEDITOR_H_6CAE6B7E__
#include "jucer_ComponentEditorCanvas.h"
#include "../jucer_DocumentEditorComponent.h"
#include "../../model/Component/jucer_ComponentDocument.h"
#include "../Editor Base/jucer_EditorCanvas.h"
//==============================================================================
@@ -50,13 +52,21 @@ public:
void paint (Graphics& g);
void resized();
//==============================================================================
ComponentDocument& getDocument() const { return *componentDocument; }
Viewport* getViewport() const;
ComponentEditorCanvas* getCanvas() const;
const StringArray getSelectedIds() const;
void getSelectedItemProperties (Array <PropertyComponent*>& props);
void deleteSelection();
void deselectNonComponents();
void selectionToFront();
void selectionToBack();
//==============================================================================
void test();
EditorCanvasBase::SelectedItems& getSelection() { return selection; }
private:
class ClassInfoHolder;
class LayoutEditorHolder;
@@ -65,6 +75,7 @@ private:
Project* project;
ComponentDocument* componentDocument;
EditorCanvasBase::SelectedItems selection;
TabbedComponent* tabs;
ClassInfoHolder* classInfoHolder;


+ 0
- 1122
extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorCanvas.cpp
File diff suppressed because it is too large
View File


+ 211
- 76
extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorCanvas.h View File

@@ -26,112 +26,247 @@
#ifndef __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__
#define __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__
#include "../../model/jucer_ComponentDocument.h"
#include "../jucer_DocumentEditorComponent.h"
class ComponentEditor;
//==============================================================================
class ComponentEditorCanvas : public Component,
public ValueTree::Listener,
class ComponentEditorCanvas : public EditorCanvasBase,
public Timer
{
public:
//==============================================================================
ComponentEditorCanvas (ComponentEditor& editor_);
~ComponentEditorCanvas();
ComponentEditorCanvas (ComponentEditor& editor_)
: editor (editor_)
{
initialise();
getDocument().getRoot().addListener (this);
}
//==============================================================================
ComponentEditor& getEditor();
ComponentDocument& getDocument();
~ComponentEditorCanvas()
{
getDocument().getRoot().removeListener (this);
shutdown();
}
typedef SelectedItemSet<String> SelectedItems;
SelectedItems& getSelection();
ComponentEditor& getEditor() { return editor; }
ComponentDocument& getDocument() { return editor.getDocument(); }
class ComponentHolder;
ComponentHolder* getComponentHolder() const;
void timerCallback()
{
stopTimer();
//==============================================================================
void timerCallback();
void paint (Graphics& g);
void resized();
if (! Component::isMouseButtonDownAnywhere())
getDocument().beginNewTransaction();
}
void updateComponents();
const Rectangle<int> getContentArea() const;
void drawXAxis (Graphics& g, const Rectangle<int>& r);
void drawYAxis (Graphics& g, const Rectangle<int>& r);
static Component* findComponentForState (Component* compHolder, ComponentDocument& doc, const ValueTree& state)
{
for (int i = compHolder->getNumChildComponents(); --i >= 0;)
{
Component* const c = compHolder->getChildComponent (i);
if (doc.isStateForComponent (state, c))
return c;
}
//==============================================================================
void valueTreePropertyChanged (ValueTree&, const var::identifier&) { updateComponents(); }
void valueTreeChildrenChanged (ValueTree& treeWhoseChildHasChanged) { updateComponents(); }
void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) {}
return 0;
}
//==============================================================================
const StringArray getSelectedIds() const;
void getSelectedItemProperties (Array <PropertyComponent*>& props);
void deleteSelection();
void deselectNonComponents();
void selectionToFront();
void selectionToBack();
static void updateComponentsIn (Component* compHolder, ComponentDocument& doc, SelectedItems& selection)
{
int i;
for (i = compHolder->getNumChildComponents(); --i >= 0;)
{
Component* c = compHolder->getChildComponent (i);
if (! doc.containsComponent (c))
{
selection.deselect (ComponentDocument::getJucerIDFor (c));
delete c;
}
}
Array <Component*> componentsInOrder;
const int num = doc.getNumComponents();
for (i = 0; i < num; ++i)
{
const ValueTree v (doc.getComponent (i));
Component* c = findComponentForState (compHolder, doc, v);
if (c == 0)
{
c = doc.createComponent (i);
compHolder->addAndMakeVisible (c);
}
doc.updateComponent (c);
componentsInOrder.add (c);
}
// Make sure the z-order is correct..
if (num > 0)
{
componentsInOrder.getLast()->toFront (false);
for (i = num - 1; --i >= 0;)
componentsInOrder.getUnchecked(i)->toBehind (componentsInOrder.getUnchecked (i + 1));
}
}
void updateComponents()
{
updateComponentsIn (getComponentHolder(), getDocument(), editor.getSelection());
startTimer (500);
}
//==============================================================================
void showSizeGuides();
void hideSizeGuides();
int getCanvasWidth() { return getDocument().getCanvasWidth().getValue(); }
int getCanvasHeight() { return getDocument().getCanvasHeight().getValue(); }
void setCanvasWidth (int w) { getDocument().getCanvasWidth() = w; }
void setCanvasHeight (int h) { getDocument().getCanvasHeight() = h; }
//==============================================================================
class DragOperation;
ComponentDocument::MarkerList& getMarkerList (bool isX)
{
return getDocument().getMarkerList (isX);
}
const SelectedItems::ItemType findObjectIdAt (const Point<int>& position)
{
for (int i = getComponentHolder()->getNumChildComponents(); --i >= 0;)
{
Component* const c = getComponentHolder()->getChildComponent(i);
if (c->getBounds().contains (position))
return ComponentDocument::getJucerIDFor (c);
}
void beginDrag (const MouseEvent& e, const ResizableBorderComponent::Zone& zone);
void continueDrag (const MouseEvent& e);
void endDrag (const MouseEvent& e);
return String::empty;
}
//==============================================================================
class ComponentHolder : public Component
void showPopupMenu (const Point<int>& position)
{
public:
ComponentHolder();
~ComponentHolder();
void updateComponents (ComponentDocument& doc, SelectedItems& selection);
Component* getComponentForState (ComponentDocument& doc, const ValueTree& state) const;
Component* findComponentWithID (const String& uid) const;
Component* findComponentAt (const Point<int>& pos) const;
void findLassoItemsInArea (Array <SelectedItems::ItemType>& itemsFound, const Rectangle<int>& lassoArea);
};
PopupMenu m;
if (findObjectIdAt (position).isNotEmpty())
{
m.addCommandItem (commandManager, CommandIDs::toFront);
m.addCommandItem (commandManager, CommandIDs::toBack);
m.addSeparator();
m.addCommandItem (commandManager, StandardApplicationCommandIDs::del);
const int r = m.show();
(void) r;
}
else
{
getDocument().addNewComponentMenuItems (m);
const int r = m.show();
getDocument().performNewComponentMenuItem (r);
}
}
const ValueTree getObjectState (const String& objectId)
{
return getDocument().getComponentWithID (objectId);
}
private:
ComponentEditor& editor;
const BorderSize border;
ScopedPointer <DragOperation> dragger;
const Rectangle<int> getObjectPosition (const ValueTree& state)
{
return getDocument().getCoordsFor (state).resolve (getDocument());
}
RectangleCoordinates getObjectCoords (const ValueTree& state)
{
return getDocument().getCoordsFor (state);
}
SelectedItems& getSelection()
{
return editor.getSelection();
}
void deselectNonDraggableObjects()
{
editor.deselectNonComponents();
}
void findLassoItemsInArea (Array <SelectedItems::ItemType>& itemsFound, const Rectangle<int>& area)
{
for (int i = getComponentHolder()->getNumChildComponents(); --i >= 0;)
{
Component* c = getComponentHolder()->getChildComponent(i);
if (c->getBounds().intersects (area))
itemsFound.add (ComponentDocument::getJucerIDFor (c));
}
}
//==============================================================================
class OverlayItemComponent : public Component
class DragOperation : public EditorDragOperation
{
public:
OverlayItemComponent (ComponentEditorCanvas& canvas_);
DragOperation (ComponentEditorCanvas* canvas_,
const MouseEvent& e,
Component* snapGuideParentComp_,
const ResizableBorderComponent::Zone& zone_)
: EditorDragOperation (canvas_, e, snapGuideParentComp_, zone_)
{
}
~DragOperation()
{
getUndoManager().beginNewTransaction();
}
protected:
ComponentDocument& getDocument() throw() { return static_cast <ComponentEditorCanvas*> (canvas)->getDocument(); }
void setBoundsInTargetSpace (const Rectangle<int>& r);
int getCanvasWidth() { return getDocument().getCanvasWidth().getValue(); }
int getCanvasHeight() { return getDocument().getCanvasHeight().getValue(); }
ComponentDocument& getDocument() { return canvas.getDocument(); }
UndoManager& getUndoManager() { return *getDocument().getUndoManager(); }
protected:
ComponentEditorCanvas& canvas;
const Rectangle<float> getObjectPosition (const ValueTree& state)
{
ComponentDocument& doc = getDocument();
RectangleCoordinates relativePos (doc.getCoordsFor (state));
const Rectangle<int> intPos (relativePos.resolve (doc));
return intPos.toFloat();
}
bool setObjectPosition (ValueTree& state, const Rectangle<float>& newBounds)
{
ComponentDocument& doc = getDocument();
RectangleCoordinates pr (doc.getCoordsFor (state));
pr.moveToAbsolute (newBounds, doc);
return doc.setCoordsFor (state, pr);
}
};
friend class OverlayItemComponent;
class ComponentResizeFrame;
class MarkerComponent;
class DocumentResizerFrame;
class OverlayComponent;
DragOperation* createDragOperation (const MouseEvent& e, Component* snapGuideParentComponent,
const ResizableBorderComponent::Zone& zone)
{
DragOperation* d = new DragOperation (this, e, snapGuideParentComponent, zone);
Array<ValueTree> selected, unselected;
//==============================================================================
ComponentHolder* componentHolder;
OverlayComponent* overlay;
DocumentResizerFrame* resizeFrame;
SelectedItems selection;
for (int i = getDocument().getNumComponents(); --i >= 0;)
{
const ValueTree v (getDocument().getComponent (i));
if (editor.getSelection().isSelected (v [ComponentDocument::idProperty]))
selected.add (v);
else
unselected.add (v);
}
d->initialise (selected, unselected);
return d;
}
const Array<Component*> getSelectedComps() const;
const Array<Component*> getUnselectedComps() const;
UndoManager& getUndoManager()
{
return *getDocument().getUndoManager();
}
private:
//==============================================================================
ComponentEditor& editor;
};


+ 1
- 0
extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorToolbar.h View File

@@ -27,6 +27,7 @@
#define __JUCER_COMPONENTEDITORTOOLBAR_H_6B5CA931__
//==============================================================================
class ComponentEditorToolbarFactory : public ToolbarItemFactory
{
public:


+ 8
- 10
extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentEditorTreeView.h View File

@@ -26,8 +26,6 @@
#ifndef __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__
#define __JUCE_COMPONENTEDITORTREEVIEW_H_F3B95A41__
#include "../jucer_JucerTreeViewBase.h"
//==============================================================================
namespace ComponentEditorTreeView
@@ -41,12 +39,12 @@ namespace ComponentEditorTreeView
Base (ComponentEditor& editor_)
: editor (editor_)
{
editor.getCanvas()->getSelection().addChangeListener (this);
editor.getSelection().addChangeListener (this);
}
~Base()
{
editor.getCanvas()->getSelection().removeChangeListener (this);
editor.getSelection().removeChangeListener (this);
}
//==============================================================================
@@ -78,16 +76,16 @@ namespace ComponentEditorTreeView
void itemSelectionChanged (bool isNowSelected)
{
if (isNowSelected)
editor.getCanvas()->getSelection().addToSelection (getItemId());
editor.getSelection().addToSelection (getItemId());
else
editor.getCanvas()->getSelection().deselect (getItemId());
editor.getSelection().deselect (getItemId());
}
void changeListenerCallback (void*) { updateSelectionState(); }
void updateSelectionState()
{
setSelected (editor.getCanvas()->getSelection().isSelected (getItemId()), false);
setSelected (editor.getSelection().isSelected (getItemId()), false);
}
bool isMissing() { return false; }
@@ -204,13 +202,13 @@ namespace ComponentEditorTreeView
}
//==============================================================================
const String getItemId() const { return markerState [ComponentDocument::idProperty]; }
const String getItemId() const { return MarkerListBase::getId (markerState); }
bool mightContainSubItems() { return false; }
void refreshSubItems() {}
const String getDisplayName() const { return getRenamingName(); }
const String getRenamingName() const { return markerState [ComponentDocument::markerNameProperty]; }
const String getRenamingName() const { return markerState [MarkerListBase::getMarkerNameProperty()]; }
Image* getIcon() const { return LookAndFeel::getDefaultLookAndFeel().getDefaultDocumentFileImage(); }
@@ -218,7 +216,7 @@ namespace ComponentEditorTreeView
void valueTreePropertyChanged (ValueTree& tree, const var::identifier& property)
{
if (property == ComponentDocument::markerNameProperty)
if (property == MarkerListBase::getMarkerNameProperty())
repaintItem();
}


+ 28
- 147
extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditor.cpp View File

@@ -24,49 +24,51 @@
*/
#include "../../jucer_Headers.h"
#include "jucer_DrawableObjectComponent.h"
#include "jucer_DrawableEditor.h"
#include "../../model/Drawable/jucer_DrawableDocument.h"
#include "../jucer_JucerTreeViewBase.h"
#include "jucer_DrawableTreeViewItem.h"
#include "../Editor Base/jucer_EditorDragOperation.h"
#include "../Editor Base/jucer_EditorPanel.h"
#include "../Editor Base/jucer_EditorCanvas.h"
#include "jucer_DrawableEditor.h"
#include "jucer_DrawableEditorCanvas.h"
#include "jucer_DrawableEditorTreeView.h"
#include "jucer_DrawableEditorToolbar.h"
//==============================================================================
class RightHandPanel : public Component
class DrawableEditor::Panel : public EditorPanelBase
{
public:
RightHandPanel (DrawableEditor& editor_)
: editor (editor_)
Panel (DrawableEditor& editor_)
: toolbarFactory (editor_),
editor (editor_)
{
setOpaque (true);
addAndMakeVisible (tree = new TreeView());
tree->setRootItemVisible (true);
tree->setMultiSelectEnabled (true);
tree->setDefaultOpenness (true);
tree->setColour (TreeView::backgroundColourId, Colours::white);
tree->setIndentSize (15);
tree->setRootItem (DrawableTreeViewItem::createItemForNode (editor, editor.getDocument().getRootDrawableNode()));
}
~RightHandPanel()
~Panel()
{
tree->deleteRootItem();
deleteAllChildren();
shutdown();
}
void paint (Graphics& g)
void createCanvas()
{
g.fillAll (Colour::greyLevel (0.92f));
initialise (new DrawableEditorCanvas (editor), toolbarFactory,
DrawableTreeViewItem::createItemForNode (editor, editor.getDocument().getRootDrawableNode()));
}
void resized()
SelectedItemSet<String>& getSelection()
{
tree->setSize (getWidth(), getHeight());
return editor.getSelection();
}
void getSelectedItemProperties (Array<PropertyComponent*>& newComps)
{
//editor.getSelectedItemProperties (newComps);
}
private:
DrawableEditorToolbarFactory toolbarFactory;
DrawableEditor& editor;
TreeView* tree;
};
//==============================================================================
@@ -81,12 +83,8 @@ DrawableEditor::DrawableEditor (OpenDocumentManager::Document* document,
setOpaque (true);
addAndMakeVisible (rightHandPanel = new RightHandPanel (*this));
Canvas* canvas = new Canvas (*this);
addAndMakeVisible (viewport = new Viewport());
viewport->setViewedComponent (canvas);
canvas->createRootObject();
addAndMakeVisible (panel = new Panel (*this));
panel->createCanvas();
}
DrawableEditor::~DrawableEditor()
@@ -94,11 +92,6 @@ DrawableEditor::~DrawableEditor()
deleteAllChildren();
}
int64 DrawableEditor::getHashForNode (const ValueTree& node)
{
return node ["id"].toString().hashCode64();
}
void DrawableEditor::paint (Graphics& g)
{
g.fillAll (Colours::white);
@@ -106,117 +99,5 @@ void DrawableEditor::paint (Graphics& g)
void DrawableEditor::resized()
{
rightHandPanel->setBounds (getWidth() - 200, 0, 200, getHeight());
viewport->setBounds (0, 0, rightHandPanel->getX(), getHeight());
getCanvas()->updateSize();
}
//==============================================================================
DrawableEditor::Canvas::Canvas (DrawableEditor& editor_)
: editor (editor_), border (40)
{
origin.setXY (50, 50);
}
DrawableEditor::Canvas::~Canvas()
{
rootObject = 0;
}
void DrawableEditor::Canvas::createRootObject()
{
addAndMakeVisible (rootObject = DrawableObjectComponent::create (editor.getDocument().getRootDrawableNode(),
editor, 0));
rootObject->drawableOriginRelativeToParentTopLeft = origin;
rootObject->reloadFromValueTree();
}
void DrawableEditor::Canvas::paint (Graphics& g)
{
/* g.setColour (Colours::lightgrey);
g.fillRect (0, border.getTop() - 1, getWidth(), 1);
g.fillRect (0, getHeight() - border.getBottom(), getWidth(), 1);
g.fillRect (border.getLeft() - 1, 0, 1, getHeight());
g.fillRect (getWidth() - border.getRight(), 0, 1, getHeight());*/
g.setColour (Colours::grey);
g.fillRect (0, origin.getY(), getWidth(), 1);
g.fillRect (origin.getX(), 0, 1, getHeight());
}
void DrawableEditor::Canvas::mouseDown (const MouseEvent& e)
{
lasso = 0;
if (e.mods.isPopupMenu())
{
PopupMenu m;
m.addItem (1, "New Rectangle");
m.addItem (2, "New Circle");
switch (m.show())
{
case 1:
editor.getDocument().addRectangle();
break;
case 2:
editor.getDocument().addCircle();
break;
default:
break;
}
}
else
{
addAndMakeVisible (lasso = new LassoComponent <int64>());
lasso->beginLasso (e, this);
}
}
void DrawableEditor::Canvas::mouseDrag (const MouseEvent& e)
{
if (lasso != 0)
lasso->dragLasso (e);
}
void DrawableEditor::Canvas::mouseUp (const MouseEvent& e)
{
if (lasso != 0)
{
lasso->endLasso();
lasso = 0;
}
}
void DrawableEditor::Canvas::findLassoItemsInArea (Array <int64>& itemsFound, const Rectangle<int>& area)
{
for (int i = getNumChildComponents(); --i >= 0;)
{
DrawableObjectComponent* d = dynamic_cast <DrawableObjectComponent*> (getChildComponent(i));
if (d != 0)
d->findLassoItemsInArea (itemsFound, area);
}
}
SelectedItemSet <int64>& DrawableEditor::Canvas::getLassoSelection()
{
return editor.selectedItems;
}
void DrawableEditor::Canvas::updateSize()
{
Rectangle<int> r (rootObject->getBounds());
setSize (jmax (editor.viewport->getMaximumVisibleWidth(), r.getRight()),
jmax (editor.viewport->getMaximumVisibleHeight(), r.getBottom()));
}
void DrawableEditor::Canvas::childBoundsChanged (Component* child)
{
if (child == rootObject)
updateSize();
panel->setBounds (getLocalBounds());
}

+ 7
- 39
extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditor.h View File

@@ -27,7 +27,8 @@
#define __JUCER_DRAWABLEEDITOR_JUCEHEADER__
#include "../jucer_DocumentEditorComponent.h"
class DrawableObjectComponent;
#include "../Editor Base/jucer_EditorCanvas.h"
class DrawableEditorCanvas;
//==============================================================================
@@ -38,8 +39,7 @@ class DrawableEditor : public DocumentEditorComponent
public:
//==============================================================================
DrawableEditor (OpenDocumentManager::Document* document,
Project* project,
DrawableDocument* drawableDocument);
Project* project, DrawableDocument* drawableDocument);
~DrawableEditor();
void paint (Graphics& g);
@@ -47,51 +47,19 @@ public:
DrawableDocument& getDocument() const { return *drawableDocument; }
static int64 getHashForNode (const ValueTree& node);
EditorCanvasBase::SelectedItems& getSelection() { return selection; }
//==============================================================================
class Canvas : public Component,
public LassoSource <int64>
{
public:
Canvas (DrawableEditor& editor_);
~Canvas();
void createRootObject();
const Point<int> getOrigin() const throw() { return origin; }
void paint (Graphics& g);
void mouseDown (const MouseEvent& e);
void mouseDrag (const MouseEvent& e);
void mouseUp (const MouseEvent& e);
void childBoundsChanged (Component* child);
void updateSize();
void findLassoItemsInArea (Array <int64>& itemsFound, const Rectangle<int>& area);
SelectedItemSet <int64>& getLassoSelection();
private:
DrawableEditor& editor;
ScopedPointer <DrawableObjectComponent> rootObject;
ScopedPointer <LassoComponent <int64> > lasso;
BorderSize border;
Point<int> origin;
};
Canvas* getCanvas() const { return static_cast <Canvas*> (viewport->getViewedComponent()); }
SelectedItemSet <int64> selectedItems;
class Panel;
//==============================================================================
juce_UseDebuggingNewOperator
private:
friend class Canvas;
Project* project;
DrawableDocument* drawableDocument;
EditorCanvasBase::SelectedItems selection;
Viewport* viewport;
Component* rightHandPanel;
Panel* panel;
};


+ 199
- 0
extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditorCanvas.h View File

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

+ 92
- 0
extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditorToolbar.h View File

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

extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableTreeViewItem.h → extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableEditorTreeView.h View File

@@ -26,9 +26,6 @@
#ifndef __JUCER_DRAWABLETREEVIEWITEM_JUCEHEADER__
#define __JUCER_DRAWABLETREEVIEWITEM_JUCEHEADER__
#include "../jucer_DocumentEditorComponent.h"
#include "../../model/jucer_DrawableDocument.h"
//==============================================================================
/**
@@ -41,7 +38,7 @@ class DrawableTreeViewItem : public JucerTreeViewBase,
: editor (editor_), node (drawableRoot), typeName (typeName_)
{
node.addListener (this);
editor.selectedItems.addChangeListener (this);
editor.getSelection().addChangeListener (this);
}
public:
@@ -77,7 +74,7 @@ public:
~DrawableTreeViewItem()
{
editor.selectedItems.removeChangeListener (this);
editor.getSelection().removeChangeListener (this);
node.removeListener (this);
}
@@ -133,7 +130,7 @@ public:
if (openness != 0)
restoreOpennessState (*openness);
editor.selectedItems.changed();
editor.getSelection().changed();
}
const String getDisplayName() const
@@ -169,23 +166,17 @@ public:
void itemSelectionChanged (bool isNowSelected)
{
DrawableEditor* ed = getEditor();
jassert (ed != 0);
if (ed != 0)
{
const int64 hash = DrawableEditor::getHashForNode (node);
const String objectId (DrawableDocument::getIdFor (node));
if (isNowSelected)
ed->selectedItems.addToSelection (hash);
else
ed->selectedItems.deselect (hash);
}
if (isNowSelected)
editor.getSelection().addToSelection (objectId);
else
editor.getSelection().deselect (objectId);
}
void changeListenerCallback (void*)
{
setSelected (editor.selectedItems.isSelected (DrawableEditor::getHashForNode (node)), false);
setSelected (editor.getSelection().isSelected (DrawableDocument::getIdFor (node)), false);
}
const String getTooltip()

+ 0
- 322
extras/Jucer (experimental)/Source/ui/Drawable Editor/jucer_DrawableObjectComponent.h View File

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

+ 853
- 0
extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorCanvas.cpp View File

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

+ 138
- 0
extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorCanvas.h View File

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

extras/Jucer (experimental)/Source/ui/Component Editor/jucer_ComponentDragOperation.h → extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorDragOperation.h View File

@@ -23,29 +23,40 @@
==============================================================================
*/
#ifndef __JUCER_EDITORDRAGOPERATION_H_720CD068__
#define __JUCER_EDITORDRAGOPERATION_H_720CD068__
#include "jucer_EditorCanvas.h"
//==============================================================================
class ComponentEditorCanvas::DragOperation
class EditorDragOperation : public EditorCanvasBase::DragOperation
{
public:
DragOperation (ComponentEditorCanvas& canvas_,
const Array<Component*>& items,
const Array<Component*>& itemsToSnapTo,
const MouseEvent& e,
Component* snapGuideParentComp_,
const ResizableBorderComponent::Zone& zone_)
EditorDragOperation (EditorCanvasBase* canvas_, const MouseEvent& e,
Component* snapGuideParentComp_,
const ResizableBorderComponent::Zone& zone_)
: canvas (canvas_),
snapGuideParentComp (snapGuideParentComp_),
zone (zone_),
mouseDownPos (e.getPosition())
{
}
~EditorDragOperation()
{
}
void initialise (const Array<ValueTree>& objects,
const Array<ValueTree>& objectsToSnapTo)
{
draggedObjects = objects;
int i;
for (i = 0; i < items.size(); ++i)
for (i = 0; i < objects.size(); ++i)
{
jassert (items.getUnchecked(i) != 0);
const ValueTree v (getDocument().getComponentState (items.getUnchecked(i)));
draggedComponents.add (v);
const Rectangle<float> floatPos (getComponentPosition (v));
const Rectangle<float> floatPos (getObjectPosition (objects.getReference(i)));
originalPositions.add (floatPos);
if (zone.isDraggingWholeObject() || zone.isDraggingLeftEdge())
verticalSnapPositions.add (SnapLine (floatPos.getX(), floatPos.getY(), floatPos.getBottom()));
@@ -69,26 +80,24 @@ public:
if (isDraggingLeftRight())
{
verticalSnapTargets.add (SnapLine (0, -100.0f, 10000.0f));
verticalSnapTargets.add (SnapLine (getDocument().getCanvasWidth().getValue(), -100.0f, 10000.0f));
verticalSnapTargets.add (SnapLine (getCanvasWidth(), -100.0f, 10000.0f));
if (zone.isDraggingWholeObject() || (zone.isDraggingLeftEdge() && zone.isDraggingRightEdge()))
verticalSnapTargets.add (SnapLine ((float) getDocument().getCanvasWidth().getValue() / 2.0f, 0, 10000.0f));
verticalSnapTargets.add (SnapLine ((float) getCanvasWidth() / 2.0f, 0, 10000.0f));
}
if (isDraggingUpDown())
{
horizontalSnapTargets.add (SnapLine (0, -100.0f, 10000.0f));
horizontalSnapTargets.add (SnapLine (getDocument().getCanvasHeight().getValue(), -100.0f, 10000.0f));
horizontalSnapTargets.add (SnapLine (getCanvasHeight(), -100.0f, 10000.0f));
if (zone.isDraggingWholeObject() || (zone.isDraggingTopEdge() && zone.isDraggingBottomEdge()))
horizontalSnapTargets.add (SnapLine ((float) getDocument().getCanvasHeight().getValue() / 2.0f, 0, 10000.0f));
horizontalSnapTargets.add (SnapLine ((float) getCanvasHeight() / 2.0f, 0, 10000.0f));
}
for (i = 0; i < itemsToSnapTo.size(); ++i)
for (i = 0; i < objectsToSnapTo.size(); ++i)
{
jassert (itemsToSnapTo.getUnchecked(i) != 0);
const ValueTree v (getDocument().getComponentState (itemsToSnapTo.getUnchecked(i)));
const Rectangle<float> floatPos (getComponentPosition (v));
const Rectangle<float> floatPos (getObjectPosition (objectsToSnapTo.getReference (i)));
if (isDraggingLeftRight())
{
@@ -112,12 +121,7 @@ public:
mergeSnapLines (verticalSnapTargets);
mergeSnapLines (horizontalSnapTargets);
getDocument().beginNewTransaction();
}
~DragOperation()
{
getDocument().beginNewTransaction();
getUndoManager().beginNewTransaction();
}
//==============================================================================
@@ -133,10 +137,10 @@ public:
};
//==============================================================================
class AlignmentHintComponent : public OverlayItemComponent
class AlignmentHintComponent : public EditorCanvasBase::OverlayItemComponent
{
public:
AlignmentHintComponent (ComponentEditorCanvas& canvas_, const SnapLine& line_, bool isVertical_, Component* parent)
AlignmentHintComponent (EditorCanvasBase* canvas_, const SnapLine& line_, bool isVertical_, Component* parent)
: OverlayItemComponent (canvas_), line (line_), isVertical (isVertical_)
{
const int extraEndLength = 5;
@@ -167,7 +171,7 @@ public:
//==============================================================================
void drag (const MouseEvent& e)
{
getDocument().getUndoManager()->undoCurrentTransactionOnly();
getUndoManager().undoCurrentTransactionOnly();
// (can't use getOffsetFromDragStart() because of auto-scrolling)
Point<int> distance (e.getPosition() - mouseDownPos);
@@ -188,8 +192,8 @@ public:
// the coords are relative to each other..
bool anyUpdated = false;
for (int i = 0; i < draggedComponents.size(); ++i)
if (dragItem (draggedComponents.getReference(i), distance, originalPositions.getReference(i)))
for (int i = 0; i < draggedObjects.size(); ++i)
if (dragItem (draggedObjects.getReference(i), distance, originalPositions.getReference(i)))
anyUpdated = true;
if (! anyUpdated)
@@ -203,21 +207,29 @@ public:
}
}
bool dragItem (ValueTree& v, const Point<int>& distance, const Rectangle<int>& originalPos)
bool dragItem (ValueTree& v, const Point<int>& distance, const Rectangle<float>& originalPos)
{
const Rectangle<int> newBounds (zone.resizeRectangleBy (originalPos, distance));
const Rectangle<float> newBounds (zone.resizeRectangleBy (originalPos, Point<float> ((float) distance.getX(),
(float) distance.getY())));
return setObjectPosition (v, newBounds);
}
RectangleCoordinates pr (getDocument().getCoordsFor (v));
pr.moveToAbsolute (newBounds, getDocument());
protected:
//==============================================================================
virtual int getCanvasWidth() = 0;
virtual int getCanvasHeight() = 0;
return getDocument().setCoordsFor (v, pr);
}
virtual const Rectangle<float> getObjectPosition (const ValueTree& state) = 0;
virtual bool setObjectPosition (ValueTree& state, const Rectangle<float>& newBounds) = 0;
virtual UndoManager& getUndoManager() = 0;
EditorCanvasBase* canvas;
private:
//==============================================================================
ComponentEditorCanvas& canvas;
Array <ValueTree> draggedComponents;
Array <Rectangle<int> > originalPositions;
Array <ValueTree> draggedObjects;
Array <Rectangle<float> > originalPositions;
Array <SnapLine> verticalSnapPositions, horizontalSnapPositions;
Array <SnapLine> verticalSnapTargets, horizontalSnapTargets;
const ResizableBorderComponent::Zone zone;
@@ -225,17 +237,6 @@ private:
Component* snapGuideParentComp;
Point<int> mouseDownPos;
ComponentDocument& getDocument() throw() { return canvas.getDocument(); }
const Rectangle<float> getComponentPosition (const ValueTree& state)
{
RectangleCoordinates relativePos (getDocument().getCoordsFor (state));
const Rectangle<int> intPos (relativePos.resolve (getDocument()));
originalPositions.add (intPos);
return intPos.toFloat();
}
static void mergeSnapLines (Array <SnapLine>& lines)
{
for (int i = lines.size(); --i > 0;)
@@ -329,6 +330,9 @@ private:
bool isDraggingLeftRight() const { return zone.isDraggingWholeObject() || zone.isDraggingLeftEdge() || zone.isDraggingRightEdge(); }
bool isDraggingUpDown() const { return zone.isDraggingWholeObject() || zone.isDraggingTopEdge() || zone.isDraggingBottomEdge(); }
DragOperation (const DragOperation&);
DragOperation& operator= (const DragOperation&);
EditorDragOperation (const EditorDragOperation&);
EditorDragOperation& operator= (const EditorDragOperation&);
};
#endif // __JUCER_EDITORDRAGOPERATION_H_720CD068__

+ 163
- 0
extras/Jucer (experimental)/Source/ui/Editor Base/jucer_EditorPanel.h View File

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

extras/Jucer (experimental)/Source/ui/jucer_GroupInformationComponent.cpp → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_GroupInformationComponent.cpp View File


extras/Jucer (experimental)/Source/ui/jucer_GroupInformationComponent.h → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_GroupInformationComponent.h View File

@@ -26,8 +26,8 @@
#ifndef __JUCER_GROUPINFORMATIONCOMPONENT_JUCEHEADER__
#define __JUCER_GROUPINFORMATIONCOMPONENT_JUCEHEADER__
#include "../jucer_Headers.h"
#include "../model/jucer_Project.h"
#include "../../jucer_Headers.h"
#include "../../model/Project/jucer_Project.h"
//==============================================================================

extras/Jucer (experimental)/Source/ui/jucer_ItemPreviewComponent.cpp → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ItemPreviewComponent.cpp View File

@@ -23,7 +23,7 @@
==============================================================================
*/
#include "../jucer_Headers.h"
#include "../../jucer_Headers.h"
#include "jucer_ItemPreviewComponent.h"

extras/Jucer (experimental)/Source/ui/jucer_ItemPreviewComponent.h → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ItemPreviewComponent.h View File


extras/Jucer (experimental)/Source/ui/jucer_ProjectContentComponent.cpp → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectContentComponent.cpp View File

@@ -24,12 +24,12 @@
*/
#include "jucer_ProjectContentComponent.h"
#include "jucer_MainWindow.h"
#include "jucer_SourceCodeEditor.h"
#include "Drawable Editor/jucer_DrawableEditor.h"
#include "../jucer_MainWindow.h"
#include "../Code Editor/jucer_SourceCodeEditor.h"
#include "../Drawable Editor/jucer_DrawableEditor.h"
#include "jucer_ProjectInformationComponent.h"
#include "jucer_TreeViewTypes.h"
#include "../model/jucer_ProjectExporter.h"
#include "../../model/Project/jucer_ProjectExporter.h"
//==============================================================================

extras/Jucer (experimental)/Source/ui/jucer_ProjectContentComponent.h → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectContentComponent.h View File

@@ -26,8 +26,8 @@
#ifndef __JUCER_PROJECTCONTENTCOMPONENT_JUCEHEADER__
#define __JUCER_PROJECTCONTENTCOMPONENT_JUCEHEADER__
#include "../model/jucer_Project.h"
#include "jucer_OpenDocumentManager.h"
#include "../../model/Project/jucer_Project.h"
#include "../jucer_OpenDocumentManager.h"
//==============================================================================

extras/Jucer (experimental)/Source/ui/jucer_ProjectInformationComponent.cpp → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectInformationComponent.cpp View File

@@ -20,7 +20,7 @@
*/
//[Headers] You can add your own extra header files here...
#include "../model/jucer_ProjectExporter.h"
#include "../../model/Project/jucer_ProjectExporter.h"
//[/Headers]
#include "jucer_ProjectInformationComponent.h"

extras/Jucer (experimental)/Source/ui/jucer_ProjectInformationComponent.h → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectInformationComponent.h View File

@@ -23,8 +23,8 @@
#define __JUCER_PROJECTINFORMATIONCOMPONENT_JUCEHEADER__
//[Headers] -- You can add your own extra header files here --
#include "../jucer_Headers.h"
#include "../model/jucer_Project.h"
#include "../../jucer_Headers.h"
#include "../../model/Project/jucer_Project.h"
//[/Headers]

extras/Jucer (experimental)/Source/ui/jucer_ProjectTreeViewBase.cpp → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectTreeViewBase.cpp View File

@@ -24,7 +24,7 @@
*/
#include "jucer_ProjectTreeViewBase.h"
#include "jucer_OpenDocumentManager.h"
#include "../jucer_OpenDocumentManager.h"
//==============================================================================

extras/Jucer (experimental)/Source/ui/jucer_ProjectTreeViewBase.h → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_ProjectTreeViewBase.h View File

@@ -26,11 +26,12 @@
#ifndef __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__
#define __JUCER_PROJECTTREEVIEWBASE_JUCEHEADER__
#include "../jucer_Headers.h"
#include "../model/jucer_Project.h"
#include "../model/jucer_ResourceFile.h"
#include "../../jucer_Headers.h"
#include "../../model/Project/jucer_Project.h"
#include "../../model/Project/jucer_ResourceFile.h"
#include "../jucer_JucerTreeViewBase.h"
#include "jucer_ProjectContentComponent.h"
#include "jucer_JucerTreeViewBase.h"
//==============================================================================
class ProjectTreeViewBase : public JucerTreeViewBase,

extras/Jucer (experimental)/Source/ui/jucer_TreeViewTypes.cpp → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_TreeViewTypes.cpp View File

@@ -26,10 +26,10 @@
#include "jucer_TreeViewTypes.h"
#include "jucer_ProjectInformationComponent.h"
#include "jucer_GroupInformationComponent.h"
#include "jucer_SourceCodeEditor.h"
#include "jucer_OpenDocumentManager.h"
#include "jucer_ItemPreviewComponent.h"
#include "../model/jucer_NewFileWizard.h"
#include "../jucer_OpenDocumentManager.h"
#include "../Project Editor/jucer_ItemPreviewComponent.h"
#include "../Code Editor/jucer_SourceCodeEditor.h"
#include "../../model/Project/jucer_NewFileWizard.h"
//==============================================================================

extras/Jucer (experimental)/Source/ui/jucer_TreeViewTypes.h → extras/Jucer (experimental)/Source/ui/Project Editor/jucer_TreeViewTypes.h View File


+ 1
- 1
extras/Jucer (experimental)/Source/ui/jucer_DocumentEditorComponent.cpp View File

@@ -24,7 +24,7 @@
*/
#include "jucer_DocumentEditorComponent.h"
#include "jucer_ProjectContentComponent.h"
#include "Project Editor/jucer_ProjectContentComponent.h"
//==============================================================================


+ 2
- 2
extras/Jucer (experimental)/Source/ui/jucer_MainWindow.cpp View File

@@ -26,8 +26,8 @@
#include "../jucer_Headers.h"
#include "jucer_MainWindow.h"
#include "jucer_OpenDocumentManager.h"
#include "jucer_SourceCodeEditor.h"
#include "../model/jucer_ProjectWizard.h"
#include "Code Editor/jucer_SourceCodeEditor.h"
#include "../model/Project/jucer_ProjectWizard.h"
//==============================================================================


+ 1
- 1
extras/Jucer (experimental)/Source/ui/jucer_MainWindow.h View File

@@ -26,7 +26,7 @@
#ifndef __JUCER_MAINWINDOW_JUCEHEADER__
#define __JUCER_MAINWINDOW_JUCEHEADER__
#include "jucer_ProjectContentComponent.h"
#include "Project Editor/jucer_ProjectContentComponent.h"
#include "Component Editor/jucer_ComponentEditor.h"
//==============================================================================


+ 2
- 2
extras/Jucer (experimental)/Source/ui/jucer_OpenDocumentManager.cpp View File

@@ -24,9 +24,9 @@
*/
#include "jucer_OpenDocumentManager.h"
#include "jucer_SourceCodeEditor.h"
#include "Code Editor/jucer_SourceCodeEditor.h"
#include "Drawable Editor/jucer_DrawableEditor.h"
#include "jucer_ItemPreviewComponent.h"
#include "Project Editor/jucer_ItemPreviewComponent.h"
#include "Component Editor/jucer_ComponentEditor.h"


+ 2
- 2
extras/Jucer (experimental)/Source/ui/jucer_OpenDocumentManager.h View File

@@ -26,8 +26,8 @@
#ifndef __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__
#define __JUCER_OPENDOCUMENTMANAGER_JUCEHEADER__
#include "../model/jucer_Project.h"
#include "../model/jucer_DrawableDocument.h"
#include "../model/Project/jucer_Project.h"
#include "../model/Drawable/jucer_DrawableDocument.h"
class DocumentEditorComponent;


extras/Jucer (experimental)/Source/model/jucer_Coordinate.cpp → extras/Jucer (experimental)/Source/utility/jucer_Coordinate.cpp View File

@@ -344,7 +344,7 @@ RectangleCoordinates::RectangleCoordinates()
{
}
RectangleCoordinates::RectangleCoordinates (const Rectangle<int>& rect, const String& componentName)
RectangleCoordinates::RectangleCoordinates (const Rectangle<float>& rect, const String& componentName)
: left (rect.getX(), true),
right (rect.getWidth(), componentName + ".left", true),
top (rect.getY(), false),
@@ -374,7 +374,7 @@ const Rectangle<int> RectangleCoordinates::resolve (const Coordinate::MarkerReso
return Rectangle<int> (l, t, r - l, b - t);
}
void RectangleCoordinates::moveToAbsolute (const Rectangle<int>& newPos, const Coordinate::MarkerResolver& markerResolver)
void RectangleCoordinates::moveToAbsolute (const Rectangle<float>& newPos, const Coordinate::MarkerResolver& markerResolver)
{
left.moveToAbsolute (newPos.getX(), markerResolver);
right.moveToAbsolute (newPos.getRight(), markerResolver);

extras/Jucer (experimental)/Source/model/jucer_Coordinate.h → extras/Jucer (experimental)/Source/utility/jucer_Coordinate.h View File

@@ -146,12 +146,12 @@ class RectangleCoordinates
public:
//==============================================================================
RectangleCoordinates();
explicit RectangleCoordinates (const Rectangle<int>& rect, const String& componentName);
explicit RectangleCoordinates (const Rectangle<float>& rect, const String& componentName);
explicit RectangleCoordinates (const String& stringVersion);
//==============================================================================
const Rectangle<int> resolve (const Coordinate::MarkerResolver& markerResolver) const;
void moveToAbsolute (const Rectangle<int>& newPos, const Coordinate::MarkerResolver& markerResolver);
void moveToAbsolute (const Rectangle<float>& newPos, const Coordinate::MarkerResolver& markerResolver);
const String toString() const;
Coordinate left, right, top, bottom;

extras/Jucer (experimental)/Source/ui/jucer_CoordinatePropertyComponent.h → extras/Jucer (experimental)/Source/utility/jucer_CoordinatePropertyComponent.h View File


+ 76
- 0
extras/Jucer (experimental)/Source/utility/jucer_MarkerListBase.h View File

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

+ 20
- 0
juce_amalgamated.cpp View File

@@ -60878,6 +60878,26 @@ const Rectangle<int> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangl
return b;
}

const Rectangle<float> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangle<float> b, const Point<float>& offset) const throw()
{
if (isDraggingWholeObject())
return b + offset;

if (isDraggingLeftEdge())
b.setLeft (b.getX() + offset.getX());

if (isDraggingRightEdge())
b.setWidth (jmax (0.0f, b.getWidth() + offset.getX()));

if (isDraggingTopEdge())
b.setTop (b.getY() + offset.getY());

if (isDraggingBottomEdge())
b.setHeight (jmax (0.0f, b.getHeight() + offset.getY()));

return b;
}

ResizableBorderComponent::ResizableBorderComponent (Component* const componentToResize,
ComponentBoundsConstrainer* const constrainer_)
: component (componentToResize),


+ 4
- 1
juce_amalgamated.h View File

@@ -6378,7 +6378,7 @@ public:

Value (const Value& other);

Value (const var& initialValue);
explicit Value (const var& initialValue);

~Value();

@@ -23180,6 +23180,9 @@ public:
const Rectangle<int> resizeRectangleBy (Rectangle<int> original,
const Point<int>& distance) const throw();

const Rectangle<float> resizeRectangleBy (Rectangle<float> original,
const Point<float>& distance) const throw();

int getZoneFlags() const throw() { return zone; }

private:


+ 1
- 1
src/containers/juce_Value.h View File

@@ -65,7 +65,7 @@ public:
Value (const Value& other);
/** Creates a Value that is set to the specified value. */
Value (const var& initialValue);
explicit Value (const var& initialValue);
/** Destructor. */
~Value();


+ 19
- 0
src/gui/components/layout/juce_ResizableBorderComponent.cpp View File

@@ -110,6 +110,25 @@ const Rectangle<int> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangl
return b;
}
const Rectangle<float> ResizableBorderComponent::Zone::resizeRectangleBy (Rectangle<float> b, const Point<float>& offset) const throw()
{
if (isDraggingWholeObject())
return b + offset;
if (isDraggingLeftEdge())
b.setLeft (b.getX() + offset.getX());
if (isDraggingRightEdge())
b.setWidth (jmax (0.0f, b.getWidth() + offset.getX()));
if (isDraggingTopEdge())
b.setTop (b.getY() + offset.getY());
if (isDraggingBottomEdge())
b.setHeight (jmax (0.0f, b.getHeight() + offset.getY()));
return b;
}
//==============================================================================
ResizableBorderComponent::ResizableBorderComponent (Component* const componentToResize,


+ 6
- 0
src/gui/components/layout/juce_ResizableBorderComponent.h View File

@@ -141,6 +141,12 @@ public:
const Rectangle<int> resizeRectangleBy (Rectangle<int> original,
const Point<int>& distance) const throw();
/** Resizes this rectangle by the given amount, moving just the edges that this zone
applies to.
*/
const Rectangle<float> resizeRectangleBy (Rectangle<float> original,
const Point<float>& distance) const throw();
/** Returns the raw flags for this zone. */
int getZoneFlags() const throw() { return zone; }


Loading…
Cancel
Save