diff --git a/extras/Introjucer/Builds/CodeBlocks/The Introjucer.cbp b/extras/Introjucer/Builds/CodeBlocks/The Introjucer.cbp
index 081ff60e53..a50ce73b08 100644
--- a/extras/Introjucer/Builds/CodeBlocks/The Introjucer.cbp
+++ b/extras/Introjucer/Builds/CodeBlocks/The Introjucer.cbp
@@ -513,6 +513,10 @@
+
+
+
+
diff --git a/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj b/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj
index ad738d81d1..0171a80572 100644
--- a/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj
+++ b/extras/Introjucer/Builds/MacOSX/The Introjucer.xcodeproj/project.pbxproj
@@ -612,6 +612,7 @@
9D7689451732AF8333402B3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ObjectTypes.cpp"; path = "../../Source/ComponentEditor/jucer_ObjectTypes.cpp"; sourceTree = "SOURCE_ROOT"; };
9DE1BC5241C70AF12B327932 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; };
9E36C30D10A1EF9305E8D663 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; };
+ 9EA541503DBADC5FFDEB0282 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeItemTypes.h"; path = "../../Source/Project/jucer_TreeItemTypes.h"; sourceTree = "SOURCE_ROOT"; };
9EE339FCA2CFDAE060CB8FE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; };
9EE5D1C3DFDD31D9D8237541 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; };
9EF583A6201DBC813C2F63C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_BinaryResources.cpp"; path = "../../Source/ComponentEditor/jucer_BinaryResources.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -773,7 +774,6 @@
CDF8F65F9079B2C14A740F0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; };
CE1DFE4E3908943656E180AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; };
CF0615A1AF1A514A60322B50 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; };
- CF21D9DB3AEC0A4DCAB36A99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Icons.cpp"; path = "../../Source/Utility/jucer_Icons.cpp"; sourceTree = "SOURCE_ROOT"; };
CF6C8BD0DA3D8CD4E99EBADA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
CF8011B3C67B609032974DA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewCppFileTemplate.cpp"; path = "../../Source/BinaryData/jucer_NewCppFileTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
D00F311BFC3C2625C457CB9B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
@@ -782,27 +782,23 @@
D0F1614CC861E8E0B59B7A06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_linux_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; };
D141433D3FE81F20490DE928 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; };
D1F9B0E9F5D54FE48BEB46EA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+ D253F74B7F5734984E568CA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
D2F1CF252F7EC62B35A21CB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.cpp"; sourceTree = "SOURCE_ROOT"; };
D2F80DA0946A5EE01FC016CA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; };
D374DC78AAC02504576AA9B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GroupComponentHandler.h"; path = "../../Source/ComponentEditor/components/jucer_GroupComponentHandler.h"; sourceTree = "SOURCE_ROOT"; };
- D3E139185095C486DD3D61F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationTool.h"; path = "../../Source/Utility/jucer_TranslationTool.h"; sourceTree = "SOURCE_ROOT"; };
+ D376B9B54EC944E766AFEC45 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; };
D4444EC6342A2A7BC4F7BC46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTextProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_ComponentTextProperty.h"; sourceTree = "SOURCE_ROOT"; };
D4697A0232AECE5DAC5E332E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
D4E56676E2EF83404EDCBA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; };
D4F2D42C58F4D86E00E76F31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; };
- D503780AB98993E8F0BA1311 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
- D5057D7B18ABD5E810A6F830 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; };
D526C38D581425949BA0E4AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePreviewComponent.h"; path = "../../Source/Application/jucer_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; };
D53B54D1786A1FFC024BF064 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../../modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; };
D678882D133090214AF681BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadLocalValue.h"; path = "../../../../modules/juce_core/threads/juce_ThreadLocalValue.h"; sourceTree = "SOURCE_ROOT"; };
D75EAC16FAECCC51E3669193 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; };
- D7A7F1AA9F313B0CCAAA73A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; };
- D800DE818BEDBF4579D15B1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; };
D87FC8F6834E9DC9C8E88B94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JustificationProperty.h"; path = "../../Source/ComponentEditor/properties/jucer_JustificationProperty.h"; sourceTree = "SOURCE_ROOT"; };
+ D926E13AB5AD647A7A00F486 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
D92A6E9404A30EED32DCE4ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_RelativePositionedRectangle.h"; path = "../../Source/ComponentEditor/ui/jucer_RelativePositionedRectangle.h"; sourceTree = "SOURCE_ROOT"; };
- D9B077E2ECDDA94961E134D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
DA345D5B9DABD049F90DC96F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GeneratedCode.h"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.h"; sourceTree = "SOURCE_ROOT"; };
- DB20268A566DABEAE3F2CBEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; };
DBE0CDE1B017190ABBFF557C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_CodeBlocks.h"; path = "../../Source/Project Saving/jucer_ProjectExport_CodeBlocks.h"; sourceTree = "SOURCE_ROOT"; };
DC5E7FF30B01118F6DAEC38F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; };
DC922C6A65D260C18E888E49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_ComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -818,22 +814,31 @@
E2DBA3307837B64AFCCD8F8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; };
E3B56C5718D87CA0EFCB2662 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AudioComponentTemplate.cpp"; path = "../../Source/BinaryData/jucer_AudioComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; };
E4BB22E27C5AA4B666F265BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextButtonHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TextButtonHandler.h"; sourceTree = "SOURCE_ROOT"; };
+ E4BD4C43370651B49F75855B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_SimpleWindow.cpp"; path = "../../Source/BinaryData/jucer_MainTemplate_SimpleWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
+ E570E57CC1FCEF78B54A7084 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
E5D6C36496F5BC84D7213BE8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
E62D9BA6E92FE7BB6EF65699 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/javascript/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; };
E65A820D34BF39478B7C5925 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DocumentEditorComponent.h"; path = "../../Source/Application/jucer_DocumentEditorComponent.h"; sourceTree = "SOURCE_ROOT"; };
+ E6F5CEC32EDC917B054467EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
+ E720FBCD836FF3AA466C31B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
E96597BBC6A98255B51B94DC = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
25F52316D256B4534BED16D1 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Introjucer.app; sourceTree = "BUILT_PRODUCTS_DIR"; };
+ CF21D9DB3AEC0A4DCAB36A99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Icons.cpp"; path = "../../Source/Utility/jucer_Icons.cpp"; sourceTree = "SOURCE_ROOT"; };
D10D51A0A2D63F38B4D86A60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceFile.cpp"; path = "../../Source/Project Saving/jucer_ResourceFile.cpp"; sourceTree = "SOURCE_ROOT"; };
- D253F74B7F5734984E568CA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; };
- D376B9B54EC944E766AFEC45 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; };
+ D3E139185095C486DD3D61F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationTool.h"; path = "../../Source/Utility/jucer_TranslationTool.h"; sourceTree = "SOURCE_ROOT"; };
+ D503780AB98993E8F0BA1311 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
+ D5057D7B18ABD5E810A6F830 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; };
D6C91E2BF537F75A80F5C1DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; };
D780ED33573AED5AD383A036 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; };
D782DA091AD3ECE158FC6A5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; };
- D926E13AB5AD647A7A00F486 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; };
+ D7A7F1AA9F313B0CCAAA73A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; };
+ D800DE818BEDBF4579D15B1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AppleRemote.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_AppleRemote.mm"; sourceTree = "SOURCE_ROOT"; };
D9342535EA61901A1AD816C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
D95D7B49EC6C6BDCB5A1B988 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; };
+ D9B077E2ECDDA94961E134D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; };
D9E59DE07A815AB303A297D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../../../modules/juce_data_structures/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; };
DAF84A553D264705FA6EB6FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeViewHandler.h"; path = "../../Source/ComponentEditor/components/jucer_TreeViewHandler.h"; sourceTree = "SOURCE_ROOT"; };
+ DB20268A566DABEAE3F2CBEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; };
DB876F7873F42DC685A58CA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; };
DCCB75165B7C73A589498E87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; };
DD2494D5F1C081898D616AF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyListener.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyListener.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -849,19 +854,15 @@
E3869AC657E984565F1718AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConnectedChildProcess.h"; path = "../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.h"; sourceTree = "SOURCE_ROOT"; };
E3FF16862AA1B2F943DC616C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; };
E446FFE889CD490FDE3F0F2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
- E4BD4C43370651B49F75855B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_SimpleWindow.cpp"; path = "../../Source/BinaryData/jucer_MainTemplate_SimpleWindow.cpp"; sourceTree = "SOURCE_ROOT"; };
E4E74B2BC3F3CB5A4F4DC55E = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_gui_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; };
E4F9D1E097CC2C1D1291823C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V2.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp"; sourceTree = "SOURCE_ROOT"; };
E530742870F07704E9616358 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; };
E54D0994D31E20A0A05EBA2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemTrayIconComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h"; sourceTree = "SOURCE_ROOT"; };
- E570E57CC1FCEF78B54A7084 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; };
E60E28D1B7491047DEA236AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectContentComponent.h"; path = "../../Source/Project/jucer_ProjectContentComponent.h"; sourceTree = "SOURCE_ROOT"; };
E63F54CF8D5D922A319C6962 = {isa = PBXFileReference; lastKnownFileType = image.png; name = projectIconXcodeIOS.png; path = ../../Source/BinaryData/projectIconXcodeIOS.png; sourceTree = "SOURCE_ROOT"; };
E642193A9990C48CFB6479A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; };
E654E3A3CD45A888C5F773DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; };
- E6F5CEC32EDC917B054467EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; };
E70CA21960A64CCB835725FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectType.cpp"; path = "../../Source/Project/jucer_ProjectType.cpp"; sourceTree = "SOURCE_ROOT"; };
- E720FBCD836FF3AA466C31B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; };
E73C7E17116F6085765622E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; };
E7A4604F766ABC8BE26C94A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeParallelogram.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp"; sourceTree = "SOURCE_ROOT"; };
E7B6A0CBA0D27A095E83F5B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; };
@@ -1083,7 +1084,8 @@
47B49049B85EED74D29C9906,
4F6365A0D2D51337151D85C3,
E70CA21960A64CCB835725FF,
- B8385E9A644BD3CD94876448, ); name = Project; sourceTree = ""; };
+ B8385E9A644BD3CD94876448,
+ 9EA541503DBADC5FFDEB0282, ); name = Project; sourceTree = ""; };
D93DED1F5F1B0E49E10A6760 = {isa = PBXGroup; children = (
9B9CAD20E1243B4351B4C8D8,
914ADDB50ED7365F08BA91F9,
diff --git a/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj b/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj
index 3348d4f86c..7668acb71d 100644
--- a/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj
+++ b/extras/Introjucer/Builds/VisualStudio2005/The Introjucer.vcproj
@@ -274,6 +274,7 @@
+
diff --git a/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj b/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj
index 8ff8f66169..449f5789a7 100644
--- a/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj
+++ b/extras/Introjucer/Builds/VisualStudio2008/The Introjucer.vcproj
@@ -274,6 +274,7 @@
+
diff --git a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj
index b384e1bf72..e61feddf16 100644
--- a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj
+++ b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj
@@ -1145,6 +1145,7 @@
+
diff --git a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters
index b392e26112..91449accd2 100644
--- a/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters
+++ b/extras/Introjucer/Builds/VisualStudio2010/The Introjucer.vcxproj.filters
@@ -1626,6 +1626,9 @@
The Introjucer\Project
+
+ The Introjucer\Project
+
The Introjucer\Utility
diff --git a/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj b/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj
index e5a1f691fd..2c95e3abd8 100644
--- a/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj
+++ b/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj
@@ -1151,6 +1151,7 @@
+
diff --git a/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj.filters b/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj.filters
index b392e26112..91449accd2 100644
--- a/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj.filters
+++ b/extras/Introjucer/Builds/VisualStudio2012/The Introjucer.vcxproj.filters
@@ -1626,6 +1626,9 @@
The Introjucer\Project
+
+ The Introjucer\Project
+
The Introjucer\Utility
diff --git a/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj b/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj
index aa041b6c32..59dbe2fea6 100644
--- a/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj
+++ b/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj
@@ -1151,6 +1151,7 @@
+
diff --git a/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj.filters b/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj.filters
index 42c10be993..127a2fedb5 100644
--- a/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj.filters
+++ b/extras/Introjucer/Builds/VisualStudio2013/The Introjucer.vcxproj.filters
@@ -1626,6 +1626,9 @@
The Introjucer\Project
+
+ The Introjucer\Project
+
The Introjucer\Utility
diff --git a/extras/Introjucer/Introjucer.jucer b/extras/Introjucer/Introjucer.jucer
index a6f64e59a8..1b29bdef44 100644
--- a/extras/Introjucer/Introjucer.jucer
+++ b/extras/Introjucer/Introjucer.jucer
@@ -432,6 +432,8 @@
file="Source/Project/jucer_ProjectType.cpp"/>
+
getModuleFolderRelativeToProject (getID(), projectSaver)
+ const RelativePath headerFromProject (exporter->getModuleFolderRelativeToProject (getID())
.getChildFile (originalHeader.getFileName()));
const RelativePath fileFromHere (headerFromProject.rebased (project.getProjectFolder(),
@@ -337,7 +337,7 @@ void LibraryModule::prepareExporter (ProjectExporter& exporter, ProjectSaver& pr
{
Project& project = exporter.getProject();
- exporter.addToExtraSearchPaths (exporter.getModuleFolderRelativeToProject (getID(), projectSaver).getParentDirectory());
+ exporter.addToExtraSearchPaths (exporter.getModuleFolderRelativeToProject (getID()).getParentDirectory());
const String extraDefs (moduleInfo.getPreprocessorDefs().trim());
@@ -348,13 +348,13 @@ void LibraryModule::prepareExporter (ProjectExporter& exporter, ProjectSaver& pr
Array compiled;
const File localModuleFolder = project.getModules().shouldCopyModuleFilesLocally (getID()).getValue()
- ? projectSaver.getLocalModuleFolder (getID())
+ ? project.getLocalModuleFolder (getID())
: moduleInfo.getFolder();
- findAndAddCompiledCode (exporter, projectSaver, localModuleFolder, compiled);
+ findAndAddCompiledUnits (exporter, &projectSaver, localModuleFolder, compiled);
if (project.getModules().shouldShowAllModuleFilesInProject (getID()).getValue())
- addBrowsableCode (exporter, projectSaver, compiled, localModuleFolder);
+ addBrowseableCode (exporter, compiled, localModuleFolder);
}
if (isVSTPluginHost (project)) VSTHelpers::addVSTFolderToPath (exporter, false);
@@ -479,7 +479,7 @@ struct FileSorter
void LibraryModule::findWildcardMatches (const File& localModuleFolder, const String& wildcardPath, Array& result) const
{
- String path (wildcardPath.upToLastOccurrenceOf ("/", false, false));
+ String path (wildcardPath.upToLastOccurrenceOf ("/", false, false));
String wildCard (wildcardPath.fromLastOccurrenceOf ("/", false, false));
Array tempList;
@@ -497,21 +497,16 @@ void LibraryModule::findWildcardMatches (const File& localModuleFolder, const St
static bool fileTargetMatches (ProjectExporter& exporter, const String& target)
{
- if (exporter.isXcode())
- return exporterTargetMatches ("xcode", target);
- if (exporter.isWindows())
- return exporterTargetMatches ("msvc", target);
- if (exporter.isLinux())
- return exporterTargetMatches ("linux", target);
- if (exporter.isAndroid())
- return exporterTargetMatches ("android", target);
- if (exporter.isCodeBlocksWindows())
- return exporterTargetMatches ("mingw", target);
+ if (exporter.isXcode()) return exporterTargetMatches ("xcode", target);
+ if (exporter.isWindows()) return exporterTargetMatches ("msvc", target);
+ if (exporter.isLinux()) return exporterTargetMatches ("linux", target);
+ if (exporter.isAndroid()) return exporterTargetMatches ("android", target);
+ if (exporter.isCodeBlocksWindows()) return exporterTargetMatches ("mingw", target);
return target.isEmpty();
}
-static bool fileShouldBeAdded (ProjectExporter& exporter, const var& properties)
+static bool fileShouldBeCompiled (ProjectExporter& exporter, const var& properties)
{
if (! fileTargetMatches (exporter, properties["target"].toString()))
return false;
@@ -525,8 +520,8 @@ static bool fileShouldBeAdded (ProjectExporter& exporter, const var& properties)
return true;
}
-void LibraryModule::findAndAddCompiledCode (ProjectExporter& exporter, ProjectSaver& projectSaver,
- const File& localModuleFolder, Array& result) const
+void LibraryModule::findAndAddCompiledUnits (ProjectExporter& exporter, ProjectSaver* projectSaver,
+ const File& localModuleFolder, Array& result) const
{
const var compileArray (moduleInfo.moduleInfo ["compile"]); // careful to keep this alive while the array is in use!
@@ -537,18 +532,21 @@ void LibraryModule::findAndAddCompiledCode (ProjectExporter& exporter, ProjectSa
const var& file = files->getReference(i);
const String filename (file ["file"].toString());
- if (filename.isNotEmpty() && fileShouldBeAdded (exporter, file))
+ if (filename.isNotEmpty() && fileShouldBeCompiled (exporter, file))
{
const File compiledFile (localModuleFolder.getChildFile (filename));
result.add (compiledFile);
- Project::Item item (projectSaver.addFileToGeneratedGroup (compiledFile));
+ if (projectSaver != nullptr)
+ {
+ Project::Item item (projectSaver->addFileToGeneratedGroup (compiledFile));
- if (file ["warnings"].toString().equalsIgnoreCase ("disabled"))
- item.getShouldInhibitWarningsValue() = true;
+ if (file ["warnings"].toString().equalsIgnoreCase ("disabled"))
+ item.getShouldInhibitWarningsValue() = true;
- if (file ["stdcall"])
- item.getShouldUseStdCallValue() = true;
+ if (file ["stdcall"])
+ item.getShouldUseStdCallValue() = true;
+ }
}
}
}
@@ -582,15 +580,14 @@ void LibraryModule::findBrowseableFiles (const File& localModuleFolder, ArraygetReference(i), filesFound);
}
-void LibraryModule::addBrowsableCode (ProjectExporter& exporter, ProjectSaver& projectSaver,
- const Array& compiled, const File& localModuleFolder) const
+void LibraryModule::addBrowseableCode (ProjectExporter& exporter, const Array& compiled, const File& localModuleFolder) const
{
if (sourceFiles.size() == 0)
findBrowseableFiles (localModuleFolder, sourceFiles);
Project::Item sourceGroup (Project::Item::createGroup (exporter.getProject(), getID(), "__mainsourcegroup" + getID()));
- const RelativePath moduleFromProject (exporter.getModuleFolderRelativeToProject (getID(), projectSaver));
+ const RelativePath moduleFromProject (exporter.getModuleFolderRelativeToProject (getID()));
for (int i = 0; i < sourceFiles.size(); ++i)
{
diff --git a/extras/Introjucer/Source/Project/jucer_Module.h b/extras/Introjucer/Source/Project/jucer_Module.h
index fecd48319a..00210d80c5 100644
--- a/extras/Introjucer/Source/Project/jucer_Module.h
+++ b/extras/Introjucer/Source/Project/jucer_Module.h
@@ -101,6 +101,7 @@ public:
void createPropertyEditors (ProjectExporter&, PropertyListBuilder&) const;
void getConfigFlags (Project&, OwnedArray& flags) const;
void findBrowseableFiles (const File& localModuleFolder, Array& files) const;
+ void findAndAddCompiledUnits (ProjectExporter&, ProjectSaver*, const File& localModuleFolder, Array& result) const;
ModuleDescription moduleInfo;
@@ -110,8 +111,7 @@ private:
File getModuleHeaderFile (const File& folder) const;
void findWildcardMatches (const File& localModuleFolder, const String& wildcardPath, Array& result) const;
- void findAndAddCompiledCode (ProjectExporter&, ProjectSaver&, const File& localModuleFolder, Array& result) const;
- void addBrowsableCode (ProjectExporter&, ProjectSaver&, const Array& compiled, const File& localModuleFolder) const;
+ void addBrowseableCode (ProjectExporter&, const Array& compiled, const File& localModuleFolder) const;
void createLocalHeaderWrapper (ProjectSaver&, const File& originalHeader, const File& localHeader) const;
bool isAUPluginHost (const Project&) const;
diff --git a/extras/Introjucer/Source/Project/jucer_ModulesPanel.h b/extras/Introjucer/Source/Project/jucer_ModulesPanel.h
index 2013afe57d..d11a2abbf0 100644
--- a/extras/Introjucer/Source/Project/jucer_ModulesPanel.h
+++ b/extras/Introjucer/Source/Project/jucer_ModulesPanel.h
@@ -418,124 +418,124 @@ private:
ModulesPanel& panel;
};
+ //==============================================================================
+ class DownloadAndInstallThread : public ThreadWithProgressWindow
+ {
+ public:
+ DownloadAndInstallThread (const Array& modulesToInstall)
+ : ThreadWithProgressWindow ("Installing New Modules", true, true),
+ result (Result::ok()),
+ modules (modulesToInstall)
+ {
+ }
+
+ static void updateModulesFromWeb (Project& project, const Array& mods)
+ {
+ DownloadAndInstallThread d (mods);
+
+ if (d.runThread())
+ {
+ if (d.result.failed())
+ {
+ AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
+ "Module Install Failed",
+ d.result.getErrorMessage());
+ }
+ else
+ {
+ for (int i = 0; i < d.modules.size(); ++i)
+ project.getModules().addModule (d.modules.getReference(i).manifestFile,
+ project.getModules().areMostModulesCopiedLocally());
+ }
+ }
+ }
+
+ static void addModuleFromWebsite (Project& project, const ModuleDescription& module)
+ {
+ Array mods;
+ mods.add (module);
+
+ static File lastLocation (EnabledModuleList::findDefaultModulesFolder (project));
+
+ FileChooser fc ("Select the parent folder for the new module...", lastLocation, String::empty, false);
+
+ if (fc.browseForDirectory())
+ {
+ lastLocation = fc.getResult();
+
+ if (lastLocation.getChildFile (ModuleDescription::getManifestFileName()).exists())
+ {
+ AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
+ "Adding Module",
+ "You chose a folder that appears to be a module.\n\n"
+ "You need to select the *parent* folder inside which the new modules will be created.");
+ return;
+ }
+
+ for (int i = 0; i < mods.size(); ++i)
+ mods.getReference(i).manifestFile = lastLocation.getChildFile (mods.getReference(i).getID())
+ .getChildFile (ModuleDescription::getManifestFileName());
+
+ updateModulesFromWeb (project, mods);
+ }
+ }
+
+ void run() override
+ {
+ for (int i = 0; i < modules.size(); ++i)
+ {
+ const ModuleDescription& m = modules.getReference(i);
+
+ setProgress (i / (double) modules.size());
+
+ MemoryBlock downloaded;
+ result = download (m, downloaded);
+
+ if (result.failed() || threadShouldExit())
+ break;
+
+ result = unzip (m, downloaded);
+
+ if (result.failed() || threadShouldExit())
+ break;
+ }
+ }
+
+ Result download (const ModuleDescription& m, MemoryBlock& dest)
+ {
+ setStatusMessage ("Downloading " + m.getID() + "...");
+
+ const ScopedPointer in (m.url.createInputStream (false, nullptr, nullptr, String::empty, 10000));
+
+ if (in != nullptr && in->readIntoMemoryBlock (dest))
+ return Result::ok();
+
+ return Result::fail ("Failed to download from: " + m.url.toString (false));
+ }
+
+ Result unzip (const ModuleDescription& m, const MemoryBlock& data)
+ {
+ setStatusMessage ("Installing " + m.getID() + "...");
+
+ MemoryInputStream input (data, false);
+ ZipFile zip (input);
+
+ if (zip.getNumEntries() == 0)
+ return Result::fail ("The downloaded file wasn't a valid module file!");
+
+ if (! m.getFolder().deleteRecursively())
+ return Result::fail ("Couldn't delete the existing folder:\n" + m.getFolder().getFullPathName());
+
+ return zip.uncompressTo (m.getFolder().getParentDirectory(), true);
+ }
+
+ Result result;
+ Array modules;
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DownloadAndInstallThread)
+ };
+
ScopedPointer webUpdateThread;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModulesPanel)
};
-
-//==============================================================================
-class DownloadAndInstallThread : public ThreadWithProgressWindow
-{
-public:
- DownloadAndInstallThread (const Array& modulesToInstall)
- : ThreadWithProgressWindow ("Installing New Modules", true, true),
- result (Result::ok()),
- modules (modulesToInstall)
- {
- }
-
- static void updateModulesFromWeb (Project& project, const Array& mods)
- {
- DownloadAndInstallThread d (mods);
-
- if (d.runThread())
- {
- if (d.result.failed())
- {
- AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
- "Module Install Failed",
- d.result.getErrorMessage());
- }
- else
- {
- for (int i = 0; i < d.modules.size(); ++i)
- project.getModules().addModule (d.modules.getReference(i).manifestFile,
- project.getModules().areMostModulesCopiedLocally());
- }
- }
- }
-
- static void addModuleFromWebsite (Project& project, const ModuleDescription& module)
- {
- Array mods;
- mods.add (module);
-
- static File lastLocation (EnabledModuleList::findDefaultModulesFolder (project));
-
- FileChooser fc ("Select the parent folder for the new module...", lastLocation, String::empty, false);
-
- if (fc.browseForDirectory())
- {
- lastLocation = fc.getResult();
-
- if (lastLocation.getChildFile (ModuleDescription::getManifestFileName()).exists())
- {
- AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon,
- "Adding Module",
- "You chose a folder that appears to be a module.\n\n"
- "You need to select the *parent* folder inside which the new modules will be created.");
- return;
- }
-
- for (int i = 0; i < mods.size(); ++i)
- mods.getReference(i).manifestFile = lastLocation.getChildFile (mods.getReference(i).getID())
- .getChildFile (ModuleDescription::getManifestFileName());
-
- updateModulesFromWeb (project, mods);
- }
- }
-
- void run() override
- {
- for (int i = 0; i < modules.size(); ++i)
- {
- const ModuleDescription& m = modules.getReference(i);
-
- setProgress (i / (double) modules.size());
-
- MemoryBlock downloaded;
- result = download (m, downloaded);
-
- if (result.failed() || threadShouldExit())
- break;
-
- result = unzip (m, downloaded);
-
- if (result.failed() || threadShouldExit())
- break;
- }
- }
-
- Result download (const ModuleDescription& m, MemoryBlock& dest)
- {
- setStatusMessage ("Downloading " + m.getID() + "...");
-
- const ScopedPointer in (m.url.createInputStream (false, nullptr, nullptr, String::empty, 10000));
-
- if (in != nullptr && in->readIntoMemoryBlock (dest))
- return Result::ok();
-
- return Result::fail ("Failed to download from: " + m.url.toString (false));
- }
-
- Result unzip (const ModuleDescription& m, const MemoryBlock& data)
- {
- setStatusMessage ("Installing " + m.getID() + "...");
-
- MemoryInputStream input (data, false);
- ZipFile zip (input);
-
- if (zip.getNumEntries() == 0)
- return Result::fail ("The downloaded file wasn't a valid module file!");
-
- if (! m.getFolder().deleteRecursively())
- return Result::fail ("Couldn't delete the existing folder:\n" + m.getFolder().getFullPathName());
-
- return zip.uncompressTo (m.getFolder().getParentDirectory(), true);
- }
-
- Result result;
- Array modules;
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DownloadAndInstallThread)
-};
diff --git a/extras/Introjucer/Source/Project/jucer_Project.h b/extras/Introjucer/Source/Project/jucer_Project.h
index cf2a66241e..ef0690e82b 100644
--- a/extras/Introjucer/Source/Project/jucer_Project.h
+++ b/extras/Introjucer/Source/Project/jucer_Project.h
@@ -104,8 +104,10 @@ public:
Value getProjectUserNotes() { return getProjectValue (Ids::userNotes); }
//==============================================================================
- File getGeneratedCodeFolder() const { return getFile().getSiblingFile ("JuceLibraryCode"); }
- File getAppIncludeFile() const { return getGeneratedCodeFolder().getChildFile (getJuceSourceHFilename()); }
+ File getGeneratedCodeFolder() const { return getFile().getSiblingFile ("JuceLibraryCode"); }
+ File getLocalModulesFolder() const { return getGeneratedCodeFolder().getChildFile ("modules"); }
+ File getLocalModuleFolder (const String& moduleID) const { return getLocalModulesFolder().getChildFile (moduleID); }
+ File getAppIncludeFile() const { return getGeneratedCodeFolder().getChildFile (getJuceSourceHFilename()); }
File getBinaryDataCppFile (int index) const;
File getBinaryDataHeaderFile() const { return getBinaryDataCppFile (0).withFileExtension (".h"); }
diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp
index 34191a9118..5f2fbb8c81 100644
--- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp
+++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp
@@ -27,11 +27,8 @@
#include "../Application/jucer_MainWindow.h"
#include "../Application/jucer_Application.h"
#include "../Code Editor/jucer_SourceCodeEditor.h"
-#include "../Project Saving/jucer_ProjectExporter.h"
-#include "../Utility/jucer_TranslationTool.h"
-#include "../Utility/jucer_JucerTreeViewBase.h"
-#include "../Wizards/jucer_NewFileWizard.h"
-#include "jucer_GroupInformationComponent.h"
+#include "jucer_TreeItemTypes.h"
+
//==============================================================================
class FileTreePanel : public TreePanelBase
@@ -41,18 +38,14 @@ public:
: TreePanelBase (&p, "fileTreeState")
{
tree.setMultiSelectEnabled (true);
- setRoot (new GroupItem (p.getMainGroup()));
+ setRoot (new FileTreeItemTypes::GroupItem (p.getMainGroup()));
}
void updateMissingFileStatuses()
{
- if (ProjectTreeItemBase* p = dynamic_cast (rootItem.get()))
+ if (FileTreeItemTypes::ProjectTreeItemBase* p = dynamic_cast (rootItem.get()))
p->checkFileStatus();
}
-
- #include "jucer_ProjectTree_Base.h"
- #include "jucer_ProjectTree_Group.h"
- #include "jucer_ProjectTree_File.h"
};
//==============================================================================
@@ -63,7 +56,7 @@ public:
: TreePanelBase (&p, "settingsTreeState")
{
tree.setMultiSelectEnabled (false);
- setRoot (new RootItem (p));
+ setRoot (new ConfigTreeItemTypes::RootItem (p));
if (tree.getNumSelectedItems() == 0)
tree.getRootItem()->setSelected (true, true);
@@ -99,25 +92,25 @@ public:
void showProjectSettings()
{
- if (ConfigTreeItemBase* root = dynamic_cast (rootItem.get()))
+ if (ConfigTreeItemTypes::ConfigTreeItemBase* root = dynamic_cast (rootItem.get()))
if (root->isProjectSettings())
root->setSelected (true, true);
}
void showModules()
{
- if (ConfigTreeItemBase* mods = getModulesItem())
+ if (ConfigTreeItemTypes::ConfigTreeItemBase* mods = getModulesItem())
mods->setSelected (true, true);
}
void showModule (const String& moduleID)
{
- if (ConfigTreeItemBase* mods = getModulesItem())
+ if (ConfigTreeItemTypes::ConfigTreeItemBase* mods = getModulesItem())
{
mods->setOpen (true);
for (int i = mods->getNumSubItems(); --i >= 0;)
- if (ModuleItem* m = dynamic_cast (mods->getSubItem (i)))
+ if (ConfigTreeItemTypes::ModuleItem* m = dynamic_cast (mods->getSubItem (i)))
if (m->moduleID == moduleID)
m->setSelected (true, true);
}
@@ -126,16 +119,11 @@ public:
TextButton openProjectButton, saveAndOpenButton;
private:
- #include "jucer_ConfigTree_Base.h"
- #include "jucer_ConfigTree_Modules.h"
- #include "jucer_ConfigTree_Exporter.h"
- #include "jucer_ModulesPanel.h"
-
- ConfigTreeItemBase* getModulesItem()
+ ConfigTreeItemTypes::ConfigTreeItemBase* getModulesItem()
{
- if (ConfigTreeItemBase* root = dynamic_cast (rootItem.get()))
+ if (ConfigTreeItemTypes::ConfigTreeItemBase* root = dynamic_cast (rootItem.get()))
if (root->isProjectSettings())
- if (ConfigTreeItemBase* mods = dynamic_cast (root->getSubItem (0)))
+ if (ConfigTreeItemTypes::ConfigTreeItemBase* mods = dynamic_cast (root->getSubItem (0)))
if (mods->isModulesList())
return mods;
@@ -931,5 +919,5 @@ bool ProjectContentComponent::perform (const InvocationInfo& info)
void ProjectContentComponent::getSelectedProjectItemsBeingDragged (const DragAndDropTarget::SourceDetails& dragSourceDetails,
OwnedArray& selectedNodes)
{
- FileTreePanel::ProjectTreeItemBase::getSelectedProjectItemsBeingDragged (dragSourceDetails, selectedNodes);
+ FileTreeItemTypes::ProjectTreeItemBase::getSelectedProjectItemsBeingDragged (dragSourceDetails, selectedNodes);
}
diff --git a/extras/Introjucer/Source/Project/jucer_TreeItemTypes.h b/extras/Introjucer/Source/Project/jucer_TreeItemTypes.h
new file mode 100644
index 0000000000..e39030bbd2
--- /dev/null
+++ b/extras/Introjucer/Source/Project/jucer_TreeItemTypes.h
@@ -0,0 +1,51 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library.
+ Copyright (c) 2013 - Raw Material Software Ltd.
+
+ Permission is granted to use this software under the terms of either:
+ a) the GPL v2 (or any later version)
+ b) the Affero GPL v3
+
+ Details of these licenses can be found at: www.gnu.org/licenses
+
+ JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ ------------------------------------------------------------------------------
+
+ To release a closed-source product which uses JUCE, commercial licenses are
+ available: visit www.juce.com for more information.
+
+ ==============================================================================
+*/
+
+#ifndef JUCER_TREEITEMTYPES_H_INCLUDED
+#define JUCER_TREEITEMTYPES_H_INCLUDED
+
+#include "../Project Saving/jucer_ProjectExporter.h"
+#include "../Utility/jucer_TranslationTool.h"
+#include "../Utility/jucer_JucerTreeViewBase.h"
+#include "../Wizards/jucer_NewFileWizard.h"
+#include "jucer_GroupInformationComponent.h"
+#include "jucer_ModulesPanel.h"
+
+
+struct FileTreeItemTypes
+{
+ #include "jucer_ProjectTree_Base.h"
+ #include "jucer_ProjectTree_Group.h"
+ #include "jucer_ProjectTree_File.h"
+};
+
+struct ConfigTreeItemTypes
+{
+ #include "jucer_ConfigTree_Base.h"
+ #include "jucer_ConfigTree_Modules.h"
+ #include "jucer_ConfigTree_Exporter.h"
+};
+
+
+#endif // JUCER_TREEITEMTYPES_H_INCLUDED